android - 使用导航组件和导航图在 Fragment(非活动)内使用 BottomNavigationView 导航
问题描述
我有一个Activity
应用程序。我创建了一个Navigation graph
包含所有可能目的地的单曲 ( Fragment
)。
Activity
layout
唯一包含一个容器,<fragment/>
因为它应该是。
有一个主片段,BottomNavigationView
其中包含用户可以导航到所有重要目的地(其中 3 个)的地方。
当我BottomNavigationView
按照官方文档中的许多教程或事件中的描述实现时,它会替换Activity
. 因此,BottomNavigationView
不再显示,因为它包含在 aFragment
而不是Activity
. layout
我希望它在主片段中向右膨胀。
我应该使用另一个Navigation graph
特定于主要 Fragment 的吗?我应该使用经典Listener
(但我会失去使用 a 的所有兴趣Navigation graph
)?有我不知道的解决方案吗?
我该如何实施?我试图创建两个不同Navigation graph
的,但我无法将其设置为我的BottomNavigationView
解决方案
回答:
创建第二个Navigation graph
包含您希望BottomNavigationView
访问的目的地。
在包含的片段中BottomNavigationView
确保插入一个FragmentContainerView
和一个适当的 ID。
然后,感谢这里的这个答案,您可以轻松实现它。
Juste 使用以下方法引用嵌套的 NavHost:
val nestedNavHostFragment = childFragmentManager.findFragmentById(R.id.bottom_nav_host) as? NavHostFragment
val navController = nestedNavHostFragment?.navController
val bottomNavigationView = view.findViewById<BottomNavigationView>(R.id.bottom_navigation)
if (navController != null) {
bottomNavigationView.setupWithNavController(navController)
} else {
throw RuntimeException("Controller not found")
}
推荐阅读
- java - Java GUI,显示闪烁的字符串
- firefox - Firefox Page Inspector API 到 Max/msp
- python - pd.DataFrame.join 不断排序
- php - Laravel 的视图总是一样的
- unity3d - 如何在 Unity 中转动基础移动
- html - flexboxgrid,width=100vw,height=100vh,滚动条仍然显示
- qt - Qt:将项目插入我的模型以提示视图重新检查 canFetchMore 时会发出什么?
- php - 将控制器动作添加到奏鸣曲页面
- java - Java 密码在不同的环境中表现不同
- php - 如何在视图页面上显示 jquery 远程错误消息?