在Android导航体系结构中,如何检查当前Fragment是否为最后一个?

时间:2018-08-31 08:33:58

标签: android kotlin alertdialog android-navigation onbackpressed

我需要显示自定义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

有没有办法做到这一点而无需反思?

2 个答案:

答案 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]
        }
    }

`

相关问题