You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的导航控制器。

修复步骤

  1. 修正HomeFragment布局的导航图引用
    把FragmentContainerView的app:navGraph属性改为:
app:navGraph="@navigation/staging_menu_navigation"
  1. 修正主导航图配置
    删除主导航图中多余的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>
  1. 修正导航绑定代码
    将HomeFragment中的绑定逻辑替换为正确的控制器获取方式:
val navHostFragment = childFragmentManager.findFragmentById(R.id.homeNavHost) as NavHostFragment
val navController = navHostFragment.navController
binding.bottomMenu.setupWithNavController(navController)

内容的提问来源于stack exchange,提问作者WISHY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:54:03