Android NavController 获取返回堆栈

Android NavController get backstack

我们根据当前目的地使用 NavController.OnDestinationChangedListener 和提供的参数 NavDestination 到 hide/show 底部导航栏(锚定在根 activity 中)。但是我们的逻辑还需要知道哪个是当前目的地的先前目的地,以便 hide/show 底部导航栏。

NavController.OnDestinationChangedListener也提供了一个NavController参数,NavController有一个内部的属性叫做mBackStack,这似乎正是我们需要的。那么,有没有一种方法可以在不使用反射的情况下访问 NavController backstack?

谢谢!

有一种方法可以通过访问图中的所有目的地然后在每个目的地中调用 navController.getBackStackEntry 来推断当前在后台堆栈中的 NavDestination(s)。

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