Fragment中嵌入NavHostFragment与BottomNavigationView点击不跳转问题
问题原因
你当前配置存在3处核心错误,共同导致底部导航点击无切换效果:
- 第一处:NavHostFragment导航图引用错误
布局中FragmentContainerView的app:navGraph属性写的是@navigation/staging_menu_navigation1,但你提供的主导航图ID为staging_menu_navigation,文件名后缀多写了数字1,导致导航图加载不匹配。 - 第二处:主导航图配置逻辑错误
你已经在主导航图中引入了三个子导航图,但是额外单独声明了dashboardFragment3作为启动目的地,既和子导航图的仪表板页面重复,也导致启动目的地和菜单ID无法匹配。 - 第三处:NavController获取方式错误
homeNavHost是HomeFragment的子级Fragment容器,不能通过Activity的findNavController获取,需要通过子FragmentManager从容器中取出NavHostFragment再获取控制器,否则会找不到对应导航栈或者拿到外层Activity的导航控制器。
修复步骤
- 修正HomeFragment布局的导航图引用
把FragmentContainerView的app:navGraph属性改为:
app:navGraph="@navigation/staging_menu_navigation"
- 修正主导航图配置
删除主导航图中多余的dashboardFragment3声明,修改启动目的地为仪表盘子导航图:
<navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/staging_menu_navigation" app:startDestination="@id/staging_dashboard_nav_graph"> <include app:graph="@navigation/staging_dashboard_nav_graph" /> <include app:graph="@navigation/staging_offer_nav_graph" /> <include app:graph="@navigation/staging_profile_nav_graph" /> </navigation>
- 修正导航绑定代码
将HomeFragment中的绑定逻辑替换为正确的控制器获取方式:
val navHostFragment = childFragmentManager.findFragmentById(R.id.homeNavHost) as NavHostFragment val navController = navHostFragment.navController binding.bottomMenu.setupWithNavController(navController)
内容的提问来源于stack exchange,提问作者WISHY
相关产品推荐
相关产品推荐

