android - 如何找出前一个片段正在使用导航组件
问题描述
我试图找出前一个片段在后台堆栈中是什么,如果它是我想要的那个,那么回到那个片段,否则转到另一个片段。我在查找上一个片段的名称/ID 时遇到问题。我目前的设置如下:
Fragment 1 -> Fragment 2 -> Fragment 3 如果 Fragment 3 的前一个 id 是 >Fragment 2 则带参数返回。
但我也会遇到这种情况:
Fragment 4 -> Fragment 3 这里我希望能够检查 Fragment 3 的先前 id/name 是否等于 Fragment 4,以及它是否返回到带有参数的 Fragment。
基本上,片段 3 将有不同的路线,我希望能够确定它将去往下一个之前的片段。
我的问题是我无法从以前的片段中获取信息。检查是否有任何可能。我是使用 Android 导航组件的新手,因此不胜感激。
如果这个问题看起来有点令人困惑,请告诉我,以便我在需要时重写它。
谢谢!
解决方案
您将使用返回的previousBackStackEntryNavBackStackEntry
是:
返回堆栈上的前一个可见条目,如果返回堆栈的可见条目少于两个,则返回 null
并获取上一个目的地的 id 使用:previousBackStackEntry.destination.id
但因为它可以为空,所以使用previousBackStackEntry?.destination?.id
在您的场景中应用它:
在片段 3 中:
val previousFragment = findNavController().previousBackStackEntry?.destination?.id
previousFragment?.let {
when (previousFragment) {
R.id.fragment_2_id ->
// The previous fragment is Fragment 2
R.id.fragment_4_id ->
// The previous fragment is Fragment 4
else ->
// The previous fragment is neither Fragment 2 nor 4
}
}
推荐阅读
- networking - 下图跟踪的是什么菜?
- sql - 需要在多个表上形成 SQL join/subQuery
- c# - Swagger 没有显示分解的数组对象 - ASP.net Core
- android - Android Studio > Kotlin > Toast 错误 > E/GraphicExt
- python - 坚持用 Python 编写 csv
- wordpress - 通过 REST API /wp-json/wp/v2/media 上传图片让我“抱歉,您不能以该用户的身份创建帖子”
- ios - 如何在没有 Mac 的情况下继续构建 Ionic iOS 应用程序?
- swift - 为什么这个便利的 init 不会在 Swift 中引入歧义?
- javascript - Javascript 正则表达式匹配 2 个 URL
- python - 如何将 2 级数组组织为自定义字典格式?