android - 底部导航视图。使用深度链接导航到目的地导致也在第一个选项卡中添加目的地片段
问题描述
假设我们有一个带有 4 个选项卡的底部导航视图,我们有一个用于 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" />
在 nav_unauth_state for frgament 我设置了深层链接
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
}
推荐阅读
- java - 如何获取 JLabel [ ] [ ] 中单击的标签鼠标的索引?
- apache-kafka - Confluent Schema Registry Master
- node.js - Firebase:通过管理 SDK 删除实例令牌
- java - 如何使用java在视图之间制作导航系统
- angular - 可以在 Angular 的 NG-Bootstrap Datepicker 中选择相同的日期
- android - 如果没有移动,则停止 DataLogger
- ios - CocoaPods 要求您的终端使用 UTF-8 编码
- javascript - jquery.Ajax 数据获取
- python-3.x - 使用解包运算符将字典拆分为变量
- python - 附加在我的代码中有时无法正常工作