如何检查导航目标是否在NavController的后堆栈中?

时间:2019-08-12 13:43:24

标签: android android-jetpack android-architecture-navigation android-jetpack-navigation

我要寻找的是我的片段是否已经在堆栈中。

例如,我导航到Fragment A到FragmentB。稍后,我导航到Fragment B到FragmentC。现在,我要检入Fragment C,该文件在后栈中有可用的FragmentA。如果是,我想将所有片段弹出到片段A,否则我想添加新的片段A。

请确保我要检查片段C中片段A的可用性。

有运气吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

  

我要寻找的是我的片段是否已经存在   还是没有后堆栈。

有一种方法可以使用NavController

            try {
                val back:NavBackStackEntry = controller.getBackStackEntry(R.id.nav_a)
                Log.d("in_back_stack", back.destination.label.toString())

            } catch (ex: IllegalArgumentException){
                Log.d("in_back_stack","no_entry")
            }

使用Navcontroller.getBackStackEntry(...)destinationId,您可以轻松知道片段是否已在后堆栈中。但是请小心使用此方法。因为如果在后堆栈中找不到IllegalArgumentException,该方法将抛出destinationId

  

请确保我要检查片段C中片段A的可用性。

您可以从任何地方检查。您只需要引用Navcontroller

相关问题