如何正确设置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
相关产品推荐
相关产品推荐

