【问题标题】:How to check Navigation Destination is in the NavController back stack or not?如何检查导航目的地是否在 NavController 回栈中?
【发布时间】:2019-08-12 13:43:24
【问题描述】:

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

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

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

有运气吗?

提前致谢。

【问题讨论】:

  • 我不认为 N​​avigation AAC 是为该用例设计的,但是您可以使用 fragmentManager.getFragments() 并遍历当前添加的片段。

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


【解决方案1】:

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

有一种方法可以使用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 你可以很容易地知道一个片段是否已经在后台堆栈中。但是使用这种方法要小心。因为如果在返回堆栈中找不到destinationId,该方法将抛出IllegalArgumentException

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

您可以在任何地方进行检查。您只需要引用NavController

【讨论】:

    猜你喜欢
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 2018-12-06
    • 2010-10-13
    • 1970-01-01
    • 2020-12-19
    相关资源
    最近更新 更多