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

如何正确设置NavController?运行闪退提示未绑定NavController如何解决

解决方案
  • 检查activity_main.xml中FragmentContainerView的配置,必须包含导航相关核心属性,正确配置示例如下:
<androidx.fragment.app.FragmentContainerView
    android:id="@+id/fragmentContainerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    <!-- 必须指定NavHostFragment实现类 -->
    android:name="androidx.navigation.fragment.NavHostFragment"
    <!-- 替换为你自己的导航图资源ID -->
    app:navGraph="@navigation/nav_graph"
    <!-- 必须设置为true,用于接管系统返回键逻辑 -->
    app:defaultNavHost="true" />
  • 修改Activity中获取NavController的代码,原有直接调用Navigation.findNavController的方式存在初始化时机问题,NavHostFragment未完成挂载时无法找到对应NavController,改为从NavHostFragment直接获取:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentContainerView);
    NavController controller = navHostFragment.getNavController();
    NavigationUI.setupActionBarWithNavController(this,controller);
}

@Override
public boolean onSupportNavigateUp() {
    NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentContainerView);
    NavController controller = navHostFragment.getNavController();
    return controller.navigateUp();
}
  • 检查模块级build.gradle的依赖配置,确保已添加Navigation相关依赖且版本统一:
dependencies {
    // 可替换为当前最新稳定版本
    def nav_version = "2.7.5"
    implementation "androidx.navigation:navigation-fragment:$nav_version"
    implementation "androidx.navigation:navigation-ui:$nav_version"
}
  • 确认XML中FragmentContainerView的id与代码中引用的R.id.fragmentContainerView完全一致,无拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:48:04