首页 > 解决方案 > 底部导航视图。使用深度链接导航到目的地导致也在第一个选项卡中添加目的地片段

问题描述

假设我们有一个带有 4 个选项卡的底部导航视图,我们有一个用于 4 个选项卡片段的深层链接,所以当从这个深层链接导航到 4 个选项卡时 - 它可以正常工作,但是当之后手动选择第一个选项卡时,第一个选项卡中也添加了 4 个选项卡的片段。

  1. 我有一个包含 4 个片段的导航图

  2. 在创建我的活动时,我使用导航控制器设置底部视图

                navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as? NavHostFragment
                navController = navHostFragment?.navController
                navController?.setGraph(R.navigation.nav_unauth_state)
                navView.inflateMenu(getBottomNavViewMenu())
                navController?.let {
                    navView.setupWithNavController(it)
                }
    
    
  3. 在此活动的清单中,我添加了<nav-graph android:value="@navigation/nav_unauth_state" />

  4. 在 nav_unauth_state for frgament 我设置了深层链接

            android:id="@+id/deepLink2"
            app:uri="https://<my_secret_url>/{action}" />

标签: androidandroid-jetpack-navigationandroid-bottomnavandroid-deep-link

解决方案


我用这个解决方案自己解决了

navView.setOnItemSelectedListener { menuItem ->
    val builder = NavOptions.Builder().setLaunchSingleTop(true).setRestoreState(false)
    val graph = navController?.currentDestination?.parent
    val destination = graph?.findNode(menuItem.itemId)
    if (menuItem.order and Menu.CATEGORY_SECONDARY == 0) {
        navController?.graph?.findStartDestination()?.id?.let {
            builder.setPopUpTo(
                it,
                inclusive = false,
                saveState = true
            )
        }
    }
    val options = builder.build()
    destination?.id?.let { id -> navController.navigate(id, null, options) }
    return@setOnItemSelectedListener true
}

推荐阅读