Android体系结构导航popBackStack抛出IllegalArgumentException“后堆栈为空”

时间:2018-07-12 15:59:09

标签: android android-architecture-navigation

我有一个使用新导航库的应用程序。我已经在NavController上附加了一个侦听器,这是我浏览该应用程序时的样子:

  1. main_fragment
  2. authentication_subgraph
  3. loading_fragment
  4. set_username_fragment呼叫popBackStack(R.id.authentication, true)
  5. loading_fragment已作为上方弹出堆栈的一部分删除。
  6. main_fragment
  7. squad_fragment

在某些情况下,通过Crashlytics报告给我的消息显示,来自squad_fragment的呼叫抛出了IllegalArgumentException,该呼叫看起来像:

close.setOnClickListener {
    if (isResumed) {
        findNavController().popBackStack()
    }
}

应该并且在每次运行的测试中,我只弹出squad_fragment并留下main_fragment,但是在某些情况下(昨晚20次),我在这里遇到了一个异常,说后退堆栈是空的。怎么会这样?我做错什么了吗?

更新

我终于可以复制问题了。当我从main_fragment导航到任何地方,然后后台运行该应用程序,执行其他操作,然后从“最新记录”列表返回该应用程序时,似乎会发生这种情况。导航库似乎没有还原后退堆栈?我正在使用1.0.0-alpha02版本。看来,如果不是调用popBackStack()而是调用navigateUp()起作用,但这与我有关,因为当前退出身份验证子图的方式是调用popBackStack(R.id.authentication, true)以返回任何片段触发了身份验证流程。最终将以相同的方式中断。

查看NavController中的代码,似乎后备堆栈已保存并恢复。所以我不明白为什么后退栈会变成空的。另外,NavHostFragment似乎正在备份NavController状态并正在恢复它,因此我不知道为什么我的后栈为空。

0 个答案:

没有答案