如何检查导航目的地是否在 NavController 返回堆栈中?

Har*_*tel 5 android android-jetpack android-architecture-navigation android-jetpack-navigation

我正在寻找的是我的片段是否已经在后台堆栈中。

例如,我导航到片段 A 到片段 B。稍后,我导航到片段 B 到片段 C。现在,我想检查片段 C 是否有片段 A 在返回堆栈中可用。如果是,我想弹出片段 A 之前的所有片段,否则我想添加新的片段 A。

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

有没有运气?

提前致谢。

zoh*_*131 5

我正在寻找的是我的片段是否已经在后台堆栈中。

有一种方法可以使用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")
}
Run Code Online (Sandbox Code Playgroud)

使用NavController.getBackStackEntry(...)&destinationId你可以很容易地知道一个片段是否已经在返回堆栈中。但使用这种方法要小心。IllegalArgumentException因为如果destinationId在返回堆栈中找不到该方法,该方法将抛出一个异常。

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

您可以从任何地方检查。您所需要的只是 的参考NavController