问题描述
假设我们有一个带有 4 个选项卡的底部导航视图,我们有一个包含 4 个选项卡的片段的深层链接,所以当从这个深层链接导航到 4 个选项卡时 - 它应该正常工作,但是之后手动选择第一个选项卡,第一个选项卡中也添加了 4 个选项卡的片段。
-
在创建我的活动时,我使用导航控制器设置了底部视图
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) }
-
在此活动的清单中,我添加了
<nav-graph android:value="@navigation/nav_unauth_state" />
-
在 frgament 的 nav_unauth_state 中我设置了深层链接
android:id="@+id/deepLink2"
app:uri="https://<my_secret_url>/{action}" />
解决方法
我用这个解决方案自己解决了
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
}