我需要显示自定义的AlertDialog
,但只有在调用NavController.navigateUp()
后没有更多的片段时。我现在的代码做了类似的事情,但有一个bug:
override fun onBackPressed() {
if (navController.navigateUp()) {
return
}
showQuitDialog()
}
字符串
这在某种程度上是可行的,但是如果我取消AlertDialog
并且不退出应用,navController
已经导航到NavGraph
根目录,这不是我在AlertDialog
出现时所在的片段。所以,如果我尝试使用该片段中的任何导航操作,我会得到错误:
java.lang.IllegalArgumentException:导航目标com.example.test/actionNavigateToNextFragment对此NavController未知
如果我可以访问NavController
中的mBackStack
字段,这个问题可以解决,但它是package private
,我不能在当前项目中使用反射。但如果它是public
,我会按以下方式使用它:
override fun onBackPressed() {
// 2 because first one is NavGraph, second one is last fragment on the stack
if(navController.mBackStack.size > 2) {
navController.navigateUp()
return
}
showQuitDialog()
}
型
有没有一种方法可以做到这一点没有反思?
4条答案
按热度按时间balp4ylt1#
您可以将起始目标的ID与当前目标的ID进行比较。类似于:
字符串
希望对你有帮助。
cx6n0qe32#
对于任何目的地尝试此操作(您可以在导航图中找到您的目的地ID):
字符串
lb3vh1jj3#
比较目的地的ID可能不是最好的解决方案,因为您可以在backstack上有多个具有相同ID但不同参数的屏幕。
这里有一个替代方案:
字符串
cgvd09ve4#
如果你想要这是一个按钮,可以这么说,你可以有这个
字符串