4

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

例如,我导航到 Fragment A 到 Fragment B。稍后,我导航到 Fragment B 到 Fragment C。现在,我想签入 Fragment C 是否有 Fragment A 在后台堆栈中可用。如果是,我想弹出所有片段直到片段 A 否则我想添加新的片段 A。

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

有运气吗?

提前致谢。

4

1 回答 1

3

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

有一种方法可以使用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.

于 2019-09-09T09:03:28.110 回答