onSaveInstanceState之后出现Androidx导航IllegalStateException

时间:2018-06-21 01:31:09

标签: android android-architecture-navigation androidx

我有一个使用AndroidX导航库的应用程序,但行为异常。特别是在我的应用程序进入/退出后台时。这是两个示例:

  1. 在片段中一个简单的单击侦听器中,我有:

(科特琳)

button.setOnClickListener {
    findNavController().popBackStack()
}

据此,我看到崩溃的消息称,由于它在IllegalStateException之后运行,所以抛出了onSaveInstanceState

  1. 我有一个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() }
    }
}

有人知道我可以如何使导航控制器更好地处理片段生命周期,而无需添加这些解决方法?

1 个答案:

答案 0 :(得分:0)

按照Navigation 1.0.0-alpha03 release notes

  

FragmentNavigator现在在FragmentManager保存状态后将忽略导航操作,避免出现“ {onSaveInstanceState之后无法执行此操作”异常b/110987825

因此升级到alpha03应该可以消除此错误。