我需要显示自定义AlertDialog
,但是仅当调用后没有更多片段时才显示NavController.navigateUp()
。我当前的代码做了类似的事情,但是有一个错误:
override fun onBackPressed() {
if (navController.navigateUp()) {
return
}
showQuitDialog()
}
这在某种程度上是可行的,但是如果我取消AlertDialog
且不退出应用程序,则该应用程序navController
已经导航到NavGraph
根目录,而不是AlertDialog
出现时所在的片段。因此,如果我尝试使用该片段中的任何导航操作,则会收到错误消息:
java.lang.IllegalArgumentException:此NavController未知导航目标com.example.test / actionNavigateToNextFragment
如果我可以访问中的mBackStack
字段NavController
,但是它是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()
}
有没有办法做到这一点而无需反思?
您可以将起始目标的ID与当前目标的ID进行比较。就像是:
override fun onBackPressed() = when {
navController.graph.startDestination == navController.currentDestination?.id -> showQuitDialog()
else -> super.onBackPressed()
}
希望能帮助到你。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句