Android Navhost片段-从菜单弹出



我在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"

最新更新