gpt4 book ai didi

android - 在 Android Navigation Architecture 中,如何检查当前 Fragment 是否是最后一个?

转载 作者:太空宇宙 更新时间:2023-11-03 12:02:41 38 4
gpt4 key购买 nike

我需要显示自定义 AlertDialog,但只有在调用 NavController.navigateUp() 后没有更多 fragment 时才会显示。我当前的代码做了类似的事情,但是有一个错误:

override fun onBackPressed() {

if (navController.navigateUp()) {
return
}

showQuitDialog()
}

这有点管用,但是如果我取消 AlertDialog 并且不退出应用程序,navController 已经导航到 NavGraph 根目录,这不是 AlertDialog 出现时我所在的 fragment 。因此,如果我尝试使用该 fragment 中的任何导航操作,我会收到错误消息:

java.lang.IllegalArgumentException: navigation destination com.example.test/actionNavigateToNextFragment is unknown to this NavController

如果我可以访问 NavController 中的 mBackStack 字段,这可以解决,但它是 package private,我不能使用在我当前的项目中反射(reflect)。但如果它是 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()
}

希望对您有所帮助。

关于android - 在 Android Navigation Architecture 中,如何检查当前 Fragment 是否是最后一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52111516/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com