我在Android上工作,我想从我的应用程序中的抽屉菜单项中重置导航回到介绍片段。
我看到了弹出选项从一个片段的动作,但我不知道如何在菜单项中使用它,甚至如果可能的话。可能这不是正确的方法,我只是希望能够重置堆栈,并回到一个定义的片段,从点击一个项目菜单。
谢谢问候。
单击menuItem时使用此代码片段
navController.popBackStack(navController.graph.startDestination,false)
在任何情况下使用下面的代码片段来弹出一些片段
val navOptions = NavOptions.Builder().setPopUpTo(R.id.popUpToFragmentId, true).build()
navController.navigate(R.id.destinationFragmentId, navOptions)
所以在重新阅读url后,我得到的解决方案,它应该清除堆栈所以我的答案是:
fun navigateFirstTabWithClearStack() {
val navController = findNavController(R.id.nav_host_main)
val navHostFragment: NavHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_main) as NavHostFragment
val inflater = navHostFragment.navController.navInflater
val graph = inflater.inflate(R.navigation.nav_graph_main)
graph.startDestination = R.id.nav_graph_tab1
navController.graph = graph
}
解自:https://github.com/android/architecture-components-samples/issues/767
只需确保菜单项的id与所选目的地的id匹配,然后调用:
// Tie all menu items in the drawer to their respective destinations
NavigationUI.setupWithNavController(navView, navController)
或
// tie only the given item to a destination
val menuItem = navView.menu.findItem(R.id.menu_item)
NavigationUI.onNavDestinationSelected(menuItem, navController)
在导航到您选择的目的地之前清除backStack是默认行为,除非菜单项具有menuCategory="secondary"
。