首页 > 解决方案 > 使用导航组件和导航图在 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

标签: androidbottomnavigationviewandroid-architecture-navigationandroid-navigation-graph

解决方案


回答:

创建第二个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")
}

推荐阅读