首页 > 解决方案 > 如何找出前一个片段正在使用导航组件

问题描述

我试图找出前一个片段在后台堆栈中是什么,如果它是我想要的那个,那么回到那个片段,否则转到另一个片段。我在查找上一个片段的名称/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 导航组件的新手,因此不胜感激。

如果这个问题看起来有点令人困惑,请告诉我,以便我在需要时重写它。

谢谢!

标签: androidkotlinandroid-fragmentsandroid-architecture-componentsandroid-navigation

解决方案


您将使用返回的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
    }
}

推荐阅读