Android NavController返回堆栈

时间:2020-05-18 15:40:47

标签: android-architecture-navigation

我们使用NavController.OnDestinationChangedListener和提供的参数NavDestination隐藏/显示底部导航栏(锚定在根活动中),具体取决于当前目的地。但是我们的逻辑还要求知道哪个是当前目的地的先前目的地,以便隐藏/显示底部导航栏。

NavController.OnDestinationChangedListener还提供了一个NavController参数,并且NavController具有一个称为mBackStack的内部属性,这似乎正是我们所需要的。那么,有没有办法在不使用反射的情况下访问NavController堆栈?

谢谢!

1 个答案:

答案 0 :(得分:0)

有一种方法可以通过访问图形中的所有目标,然后在每个目标中调用NavDestination来推断当前在后退堆栈中的navController.getBackStackEntry

val destinationsInBackStack = navController.graph.mapNotNull { dest ->
    try {
        navController.getBackStackEntry(dest.id)
        dest
    } catch (e: IllegalArgumentException) {
        null
    }
}