Я использую нижнюю панель навигации в своем MainActivity для обработки некоторых фрагментов.Это код, используемый для переключения между ними:
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
if (item.isChecked &&
supportFragmentManager.findFragmentById(R.id.act_main_fragment_container) != null
)
return@OnNavigationItemSelectedListener false
val fragment =
when (item.itemId) {
R.id.navigation_home -> fragments[0]
R.id.navigation_bookings -> fragments[1]
R.id.navigation_messages -> fragments[2]
R.id.navigation_dashboard -> fragments[3]
R.id.navigation_profile -> fragments[4]
else -> fragments[0]
}
this replaceWithNoBackStack fragment
return@OnNavigationItemSelectedListener true
}
метод replaceWithNoBackstack - просто сокращение для этого:
supportFragmentManager
?.beginTransaction()
?.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
?.replace(containerId, fragment)
?.commit()
Проблема заключается в том, что когда я переключаюсь быстрее между нимимое приложение аварийно завершает работу со следующим исключением:
java.lang.IllegalStateException: Рестартер должен быть создан только на этапе инициализации владельца в androidx.savedstate.SavedStateRegistryController.performRestore (SavedStateRegistryController.javax59).fragment.app.androidx.fragment.app.на андроидx.fragment.app.на androidx.fragment.app.FragmentManagerImpl $ 2.run (FragmentManagerImpl.java:150) на android.os.Handler.handleCallback (Handler.java:789) на android.os.Handler.dispatchMessage (Handler.java:98) на андроиде.os.Looper.loop (Looper.java:164) на android.app.ActivityThread.main (ActivityThread.java:6709) на java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:240) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:769) Я много искал и не смог найти ответ.
Я также получил эту ошибку, если я делаю вызов API, помещаю приложение в фоновый режим, жду ответа, и когда я возвращаюсь к приложению, приложение падаетКроме того, я пытаюсь немедленно отобразить фрагмент диалога (причина, по которой я думаю, что это происходит, заключается в том, что операция по воссозданию фрагмента при возврате из фона все еще выполняется во время отображения фрагмента диалога).Я решил это хакерским способом, установив задержку в 500 мс для диалога, потому что я не мог найти другие решения.
Пожалуйста, спросите, нужны ли вам дополнительные подробности относительно этого.Заранее спасибо!
РЕДАКТИРОВАТЬ Я решил эту проблему, снизив зависимость совместимости приложения до androidx.appcompat:appcompat:1.0.2
, но это всего лишь временное решение, поскольку мне придется обновлять его в будущем.Я надеюсь, что кто-то поймет это.
EDIT 2 Я решил проблему, удалив setTransition () из транзакций фрагментов.По крайней мере, я знаю причину, почему приложения для Android не имеют хорошие переходы в целом