使用导航组件的多个返回堆栈 - 如何始终转到特定底部导航选项卡的起始目的地?
Multiple back stacks using navigation component - How to always go to start destination for specific bottom navigation tab?
我正在为 BottomNavigationView
的每个选项卡实现返回堆栈。 architecture-component-samples GitHub repo 有一个示例,其中包含一个名为 setupWithNavController
的扩展函数,它提供了此功能。 我正在尝试修改扩展功能,以便特定的底部导航选项卡始终将您带到关联导航图的起始目的地。实现此目的的最佳方法是什么?
我已经尝试将导航控制器的后退堆栈弹出到其在 onNavigationItemSelectedListener
中的起始目的地,但这会导致用户看到后退导航,这是我不想要的。
例如setupWithNavController
扩展函数中的片段交易后:
if(selectedFragment.navController.graph.id == R.id.some_nav_graph){
fragmentManager.executePendindTransactions()
selectedFragment.navController.popBackStack(selectedFragment.navController.graph.startDestination, false)
}
我也试过在显示关联的导航主机之前弹出返回堆栈,但是 FragmentNavigator
不允许这样做并导致 "Ignoring popBackStack() call: FragmentManager has already saved its state."
我决定只删除然后重新添加关联导航图的 NavHostFragment
,这会导致导航控制器的后台堆栈被清除。
问题已在最新的导航组件版本 2.4.0-alpha01 中解决,但在其中使用安全参数时存在很大问题,因此在您不使用安全参数之前它完全没问题
我正在为 BottomNavigationView
的每个选项卡实现返回堆栈。 architecture-component-samples GitHub repo 有一个示例,其中包含一个名为 setupWithNavController
的扩展函数,它提供了此功能。 我正在尝试修改扩展功能,以便特定的底部导航选项卡始终将您带到关联导航图的起始目的地。实现此目的的最佳方法是什么?
我已经尝试将导航控制器的后退堆栈弹出到其在 onNavigationItemSelectedListener
中的起始目的地,但这会导致用户看到后退导航,这是我不想要的。
例如setupWithNavController
扩展函数中的片段交易后:
if(selectedFragment.navController.graph.id == R.id.some_nav_graph){
fragmentManager.executePendindTransactions()
selectedFragment.navController.popBackStack(selectedFragment.navController.graph.startDestination, false)
}
我也试过在显示关联的导航主机之前弹出返回堆栈,但是 FragmentNavigator
不允许这样做并导致 "Ignoring popBackStack() call: FragmentManager has already saved its state."
我决定只删除然后重新添加关联导航图的 NavHostFragment
,这会导致导航控制器的后台堆栈被清除。
问题已在最新的导航组件版本 2.4.0-alpha01 中解决,但在其中使用安全参数时存在很大问题,因此在您不使用安全参数之前它完全没问题