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

如何正确使用NavController?运行时提示Activity未设置NavController报错如何解决

报错核心原因:你在Activity的onCreate阶段调用Navigation.findNavController()获取FragmentContainerView对应的NavController时,作为导航宿主的NavHostFragment还没有完成初始化,无法返回绑定的NavController,也有可能是你的布局中导航宿主的配置存在遗漏。

解决方案

  • 方案1:通过NavHostFragment直接获取NavController(推荐,适配所有Navigation版本)
    把onCreate中获取NavController的代码替换为如下写法,onSupportNavigateUp中的获取逻辑也可以同步替换,避免偶现空指针:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 先通过FragmentManager获取NavHostFragment实例
    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();
}
  • 方案2:检查导航宿主布局配置
    打开activity_main.xml布局文件,确认FragmentContainerView节点包含以下必填属性:
<androidx.fragment.app.FragmentContainerView
    android:id="@+id/fragmentContainerView"
    android:name="androidx.navigation.fragment.NavHostFragment"
    app:navGraph="@navigation/你的导航图文件名"
    app:defaultNavHost="true"
    <!-- 其他自定义属性 -->
/>

如果漏写android:name或app:navGraph属性,NavHostFragment不会自动初始化NavController,就会触发该报错。

  • 方案3:延迟获取NavController(适配特殊场景)
    如果前两个方案都不生效,可以把获取NavController的逻辑延迟到布局绘制完成后执行:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 等根布局绘制完成后再获取NavController
    findViewById(android.R.id.content).post(() -> {
        NavController controller=Navigation.findNavController(this,R.id.fragmentContainerView);
        NavigationUI.setupActionBarWithNavController(this,controller);
    });
}

内容的提问来源于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 14:36:05