Приложение Kotlin открывает действие 2 с ОШИБКОЙ кнопки

#java #android #android-studio #kotlin

#java #Android #android-studio #kotlin

Вопрос:

итак, это ошибка в logcat, однако, когда я пытаюсь объявить «CreateNoteFragment» в манифесте только .Появляется MainActivity amp; .SplashScreen и не позволяет мне объявлять .CreateNoteFragment

мой CreateNoteFragment также ссылается на действие «BaseFragment» как таковое ниже ошибки. мой код нажатия кнопки находится в .MainActivity — единственном месте, где он не сломается, и вот код для этого ниже. при нажатии происходит сбой приложения, любая помощь будет оценена

     android.content.ActivityNotFoundException: Unable to find explicit activity class {com.moradi.moradinotespro/com.moradi.moradinotespro.CreateNoteFragment}; have you declared this activity in your AndroidManifest.xml?
  
 class CreateNoteFragment : BaseFragment() {

  //Button Click Create Note
        fabBtnCreateNote == findViewById(R.id.fabBtnCreateNote)

        fabBtnCreateNote.setOnClickListener {
            val intent = Intent(this, CreateNoteFragment::class.java)
            startActivity(intent)

        }

        replaceFragment(HomeFragment.newInstance(), true)
    }
  

включен манифест

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.moradi.moradinotespro">

    <!-- Permissions
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    -->

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"/>
            <activity android:name=".SplashScreenActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>
        </activity>
    </application>

</manifest>
  

Всплеск

 class SplashScreenActivity : AppCompatActivity() {

    lateinit var handler: Handler
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash_screen)

        handler = Handler()
        handler.postDelayed({
            val intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
            finish()
        },  2000)  // delaying for 2 sec till open
        }
    }
  

Действие CreateNoteFragment

 class CreateNoteFragment : BaseFragment() {
    var currentDate:String? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        arguments?.let {

        }
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_create_note, container, false)
    }

    companion object {
        @JvmStatic
        fun newInstance() =
            CreateNoteFragment().apply {
                arguments = Bundle().apply {
                }
            }
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        val sdf = SimpleDateFormat("dd/m/yyyy hh:m:ss")
        currentDate = sdf.format(Date())

        tvDateTime.text = currentDate

        imgDone.setOnClickListener {
            //Save Note
            saveNote()
        }

        imgBack.setOnClickListener {
            replaceFragment(HomeFragment.newInstance(),  false)
        }
    }
    private fun saveNote() {
        if (etNoteTitle.text.isNullOrEmpty()) {
            Toast.makeText(context, "Title Required", Toast.LENGTH_SHORT).show()
        }
        if (etNoteSubTitle.text.isNullOrEmpty()) {
            Toast.makeText(context, "SubTitle Required", Toast.LENGTH_SHORT).show()
        }

        if (etNoteDesc.text.isNullOrEmpty()) {
            Toast.makeText(context, "Note Required", Toast.LENGTH_SHORT).show()
        }



        launch {
        val notes = Notes()
            notes.title = etNoteTitle.text.toString()
            notes.subTitle = etNoteSubTitle.text.toString()
            notes.noteText = etNoteDesc.text.toString()
            notes.dateTime = currentDate
            context?.let {
            NotesDatabase.getDatabase(it).noteDao().insertNotes(notes)
                etNoteTitle.setText("")
                etNoteSubTitle.setText("")
                etNoteDesc.setText("")
            }

        }
    }

    private fun replaceFragment(fragment: Fragment, istransition: Boolean) {
        val fragmentTransition = activity!!.supportFragmentManager.beginTransaction()

        if (istransition) {
            fragmentTransition.setCustomAnimations(
                android.R.anim.slide_out_right,
                android.R.anim.slide_in_left
            )
        }
        fragmentTransition.replace(R.id.frame_layout, fragment)
            .addToBackStack(fragment.javaClass.simpleName)
    }
}
  

Комментарии:

1. проверьте, определено ли MainActivity в манифесте или нет

2. это не устраняет проблему

3. можете ли вы показать код заставки, если вы собираетесь перейти к mainactivity из splash

4. ну, это сложно, я полагаю, я пытаюсь перейти к действию CreateNoteFragment, но в манифесте это не позволит мне добавить CreateNoteFragment в манифест, только заставку и Main, но из заставки он переходит к домашнему фрагменту, затем, когда я нажимаю кнопку добавить заметку в goto CreateNoteFragment, он выходит из строя. я обновил сообщение дополнительным кодом

5. вы не можете добавить фрагмент в манифест

Ответ №1:

Проблема здесь:

 fabBtnCreateNote.setOnClickListener {
            val intent = Intent(this, CreateNoteFragment::class.java) 
            startActivity(intent)

        }
  

CreateNoteFragment не является действием, поэтому вы не можете запустить его как действие

Сначала вам нужно создать main_activity.xml файл и отдельный идентификатор Framelayout с помощью «frame_layout» следующим образом:

 <?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/frame_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</FrameLayout>
  

Затем измените set content view для MainActivity с помощью этой строки:

  override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
}
  

Вам необходимо заменить из HomeFragment на CreateNoteFragment:

     fabBtnCreateNote.setOnClickListener {
        val newFragment = CreateNoteFragment.newInstance()
        activity?.let {activity->
            val transaction = activity.supportFragmentManager.beginTransaction()
        // Replace whatever is in the fragment_container view with this fragment,
        // and add the transaction to the back stack if needed
           transaction.replace(R.id.fragment_container, newFragment,CreateNoteFragment::class.simpleName);
        // Commit the transaction
           transaction.commit();  
      }
}
  

Ваш CreateNoteFragment был добавлен в back stack, поэтому вы просто вызываете onBackPress() при нажатии кнопки back:
Измените свой код:

 imgBack.setOnClickListener {
        activity.onBackPress()
    }
  

Комментарии:

1. однако, когда я изменяю код, он говорит неразрешенную ссылку: newFragment newFragment = new CreateNoteFragment(); и неразрешенная ссылка: фрагменттранзакции

2. Я только что обновил свой ответ версией Kotlin, надеюсь, это поможет решить вашу проблему

3. Спасибо, к сожалению, он все еще сбой с обновленным кодом, это очень странно

4. но я думаю, что это связано с чем-то другим, потому что logcat теперь показывает этот java.lang. Исключение ClassCastException: com.google.android.material.floatingactionbutton. FloatingActionButton не может быть передан в android.view.ViewGroup тьфу

5. покажите свой новый код и main_activity.xml код, пожалуйста!