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

xinaiz

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

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

马塞洛(Marcelo Esperidiao)

您可以将起始目标的ID与当前目标的ID进行比较。就像是:

override fun onBackPressed() = when {
    navController.graph.startDestination == navController.currentDestination?.id -> showQuitDialog()
    else -> super.onBackPressed()
}

希望能帮助到你。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

比较当前值和体系结构组件中的最后一个值

Android导航体系结构组件-导航体系结构组件是否仅打算使用单一活动?

如何从Android MVVM体系结构的LiveData列表中获取第一个或(任何)元素?

如何使用新的导航体系结构组件为某些片段禁用导航中的UP?

如何检查标签是否为最后一个

与Android体系结构导航等效的startActivityForResult()

如何在build.gradle中为Android应用程序指定支持的体系结构?

Android体系结构组件ViewModel可以由多个LiveData返回模型组成一个对象吗?

如何检查class的div是否为最后一个元素

如何创建一个灵活的体系结构,使我可以对几种不同的基础数据模型进行操作?

在多模块/多层Android体系结构中导航

使用Android体系结构组件实现边栏导航

在Java开发的基于REST的应用程序Java体系结构中,我应该为请求/验证拆分一个实现,为域拆分一个实现吗?

如何检查是否是最后一个元素

Java:检查循环中的当前项目是否是要循环的堆栈中的最后一个项目

如何检查单词是否是字符串中的最后一个单词?

如何检查活动是否是 API 21+ 上活动堆栈中的最后一个

如何检查是否在Iterator中处理最后一个项目?

如何检查索引是否是数组中的最后一个

如何检查活动是否是应用程序活动堆栈中的最后一个活动?

如何检查Slurm作业是否是数组中的最后一个RUNNING?

如何在iOS中检查是否已导航到下一个UIViewController?

一个或多个数据库用于统计体系结构

另一个“找不到体系结构i386的符号”错误-XMPPFramework

如何检查一个结构的实例本身是否是另一个结构的实例

检查系列中的最后一个字符是否为大写,如果为真则转换为小写

ViewModel中的不可观察模型对象是否针对Android中的MVVM体系结构?

是否可以使用Android导航体系结构组件(Android Jetpack)有条件地设置startDestination?

如何检查一个 Fragment 在 ViewPager 中是否可见?