Приложение OnBackPress аварийно завершает работу при переходе от действия к фрагменту - PullRequest
0 голосов
/ 25 апреля 2018

Я использую меню ящика в своем приложении. Я выбираю одну опцию из меню и открываю фрагмент, и из этого фрагмента вызываю Activity. Так как здесь все работает нормально, но когда я нажимаю кнопку «назад» (OnbackPress), приложение закрывается.ниже ошибка.«Невозможно запустить действие ... ClassCastException ... не может быть преобразовано в Home_Tab»

Это код MainActivity.

if (savedInstanceState == null) {
        homefragment = Home_tab()
        fragmentTransaction = fragmentManager!!.beginTransaction()
        fragmentTransaction!!.replace(R.id.frame, homefragment)
        fragmentTransaction!!.addToBackStack(null)
        fragmentTransaction!!.commit()
    } else {
        homefragment = supportFragmentManager.fragments[0] as Home_tab //Crash at this line 
 }

Код, откуда вызывается backPress.

override fun onBackPressed() {
    super.onBackPressed()
    finish()
}

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Хорошо, основываясь на вашем коде, вы добавляете фрагмент в менеджер фрагментов (обычный), но пытаетесь получить его обратно из менеджера поддержки фрагментов.Это два разных класса, и ваш фрагмент может расширяться только на один

0 голосов
/ 25 апреля 2018

Вы являетесь менеджером фрагментов mixin и менеджером поддержки фрагментов, я пойду с поддержкой первого, так как это правильный способ сделать это.Чтобы получить текущий фрагмент экрана, добавленный с идентификатором контейнера, используйте findFragmentById

if (savedInstanceState == null) {
        homefragment = Home_tab()
        supportFragmentManager?.let{
            fragmentTransaction = it.beginTransaction()
            fragmentTransaction.replace(R.id.frame, homefragment)
            fragmentTransaction.addToBackStack(null)
            fragmentTransaction.commit()
        }
    } else {
        homefragment = supportFragmentManager.findFragmentById(R.id.frame) as Home_tab
 }
0 голосов
/ 25 апреля 2018
//Add a check like this before casting. 
//It is a smart cast and you can directly use the result.
Fragment fragmentZero = supportFragmentManager.fragments[0]
if (fragmentZero is Home_tab) {
   //Casting is done, you can directly use fragment here
   homefragment = fragmentZero
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...