使用导航组件的多个后堆栈-如何始终始终转到特定底部导航选项卡的起始目的地?

时间:2020-05-26 17:00:38

标签: android android-architecture-components

我正在为intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 的每个选项卡实现后退堆栈。建筑组件样本GitHub存储库中有一个示例,该示例带有名为setupWithNavController的扩展功能,可提供此功能。 我正在尝试修改扩展功能,因此特定的底部导航标签始终会将您带到相关导航图的起始目的地。实现此目的的最佳方法是什么?

我尝试将导航控制器的后堆栈弹出到BottomNavigationView中的起始位置,但这导致用户看到正在发生的后向导航,这是我所不希望的。

例如在onNavigationItemSelectedListener扩展函数中的片段事务之后:

setupWithNavController

我还尝试过在显示关联的导航主机之前弹出回栈,但是if(selectedFragment.navController.graph.id == R.id.some_nav_graph){ fragmentManager.executePendindTransactions() selectedFragment.navController.popBackStack(selectedFragment.navController.graph.startDestination, false) } 不允许这样做,并导致“忽略popBackStack()调用:FragmentManager已经保存了其状态。”

2 个答案:

答案 0 :(得分:0)

我决定只删除然后重新添加关联的导航图的NavHostFragment,这将导致导航控制器的后堆栈被清除。

答案 1 :(得分:0)

问题在最新的导航组件构建 2.4.0-alpha01 中得到解决,但是在其中使用 Safe Args 时存在很大问题,因此除非您不使用安全 args,否则它完全没问题