我有一个使用AndroidX导航库的应用程序,但行为异常。特别是在我的应用程序进入/退出后台时。这是两个示例:
(科特琳)
button.setOnClickListener {
findNavController().popBackStack()
}
据此,我看到崩溃的消息称,由于它在IllegalStateException
之后运行,所以抛出了onSaveInstanceState
。
ViewModel
与我的Fragment
相关联,并且我向观察者注册了片段视图的生命周期。这意味着我在onStart
期间收到通知。一些关键事件(例如登录状态)决定了应用程序的导航。就我而言,我有一个启动画面,可以进入登录画面或主画面。用户完成登录后,我将重置导航(将我带回到初始屏幕)。现在auth状态准备就绪,我想导航到主要片段,这通常会引发错误,因为必须先调用onResume
,然后才能认为FragmentManager
被准备就绪。我收到一条错误消息,说我正在进行交易,无法添加新交易。要对此进行调解,我必须编写以下奇怪的代码:(科特琳)
private fun safeNavigateToMain() {
if (fragmentManager == null) {
return
}
if (!isResumed) {
view?.post { safeNavigateToMain() }
return
}
try {
findNavController().navigate(R.id.main)
} catch (tr: Throwable) {
view?.post { safeNavigateToMain() }
}
}
有人知道我可以如何使导航控制器更好地处理片段生命周期,而无需添加这些解决方法?
答案 0 :(得分:0)
按照Navigation 1.0.0-alpha03 release notes:
FragmentNavigator现在在FragmentManager保存状态后将忽略导航操作,避免出现“ {onSaveInstanceState之后无法执行此操作”异常b/110987825
因此升级到alpha03应该可以消除此错误。