【发布时间】:2019-02-06 06:05:39
【问题描述】:
我需要显示自定义AlertDialog,但只有在调用NavController.navigateUp() 后没有更多片段时。我当前的代码做了类似的事情,但有一个错误:
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()
}
有没有办法做到这一点而无需反思?
【问题讨论】:
标签: android kotlin android-alertdialog android-navigation onbackpressed