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)