xin*_*aiz 6 android android-alertdialog kotlin android-navigation onbackpressed
我需要显示自定义AlertDialog,但是只有在调用后没有更多片段时才显示NavController.navigateUp()。我当前的代码做了类似的事情,但是有一个错误:
override fun onBackPressed() {
if (navController.navigateUp()) {
return
}
showQuitDialog()
}
Run Code Online (Sandbox Code Playgroud)
这在某种程度上可行,但是如果我取消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()
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点而无需反思?
小智 12
您可以将起始目标的ID与当前目标的ID进行比较。就像是:
override fun onBackPressed() = when {
navController.graph.startDestination == navController.currentDestination?.id -> showQuitDialog()
else -> super.onBackPressed()
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
2793 次 |
| 最近记录: |