Android kotlin - Navhost 片段 - 从菜单弹出
Android kotlin - Navhost fragment - Popupto from menu
我正在 Android 工作,我想通过抽屉菜单项将导航重置回介绍片段。
我在片段中的一个操作中看到了 popupto 选项,但我不知道如何在菜单项中使用它,甚至不知道如何使用它。可能这不是正确的方法,我只是希望能够重置堆栈并通过单击项目菜单返回到定义的片段。
谢谢
问候。
只需确保菜单项的 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"
。
所以在重新阅读 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
单击菜单项时使用此代码段
navController.popBackStack(navController.graph.startDestination,false)
对于任何情况,使用此代码片段弹出一些片段
val navOptions = NavOptions.Builder().setPopUpTo(R.id.popUpToFragmentId, true).build()
navController.navigate(R.id.destinationFragmentId, navOptions)
我正在 Android 工作,我想通过抽屉菜单项将导航重置回介绍片段。
我在片段中的一个操作中看到了 popupto 选项,但我不知道如何在菜单项中使用它,甚至不知道如何使用它。可能这不是正确的方法,我只是希望能够重置堆栈并通过单击项目菜单返回到定义的片段。
谢谢 问候。
只需确保菜单项的 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"
。
所以在重新阅读 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
单击菜单项时使用此代码段
navController.popBackStack(navController.graph.startDestination,false)
对于任何情况,使用此代码片段弹出一些片段
val navOptions = NavOptions.Builder().setPopUpTo(R.id.popUpToFragmentId, true).build()
navController.navigate(R.id.destinationFragmentId, navOptions)