我需要显示自定义MaxScanRows
,但仅当调用AlertDialog
之后没有更多片段时才显示。我当前的代码执行了类似的操作,但是有一个错误:
NavController.navigateUp()
这在某种程度上可行,但是如果我取消override fun onBackPressed() {
if (navController.navigateUp()) {
return
}
showQuitDialog()
}
并且不退出应用程序,则AlertDialog
已经导航到navController
根目录,这不是我所在的片段当NavGraph
出现时。因此,如果我尝试使用该片段中的任何导航操作,都会收到错误消息:
java.lang.IllegalArgumentException:导航目标 NavController未知com.example.test / actionNavigateToNextFragment
如果我可以访问AlertDialog
中的mBackStack
字段,但是它是NavController
,可以解决此问题,并且我不能在当前项目中使用反射。但是,如果它是package private
,我将通过以下方式使用它:
public
有没有办法做到这一点而无需反思?
答案 0 :(得分:3)
您可以将起始目标的ID与当前目标的ID进行比较。像这样:
override fun onBackPressed() = when {
navController.graph.startDestination == navController.currentDestination?.id -> showQuitDialog()
else -> super.onBackPressed()
}
希望有帮助。
答案 1 :(得分:0)
针对任何目的地尝试此操作(您可以在导航图中找到目的地ID):
private fun isDesiredDestination(): Boolean {
return with(navController) {
currentDestination == graph[R.id.yourDestinationId]
}
}
`