Android Navigation 异常:java.lang.RuntimeException: Unable to start activity ComponentInfo{...MainActivity}: java.lang.IllegalStateException: Activity ***..**.MainActivity@*** does not have a NavController set on *****
问题代码如下所示:
NavController navController = Navigation.findNavController(this,
R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController,
appBarConfiguration);
NavigationUI.setupWithNavController(navView, navController);
尝试通过 Navigation.findNavController
方法来获取 NavigationController
对象,这是在使用 Android Studio 时创建有底部导航栏的应用时自动生成的代码。第一次运行时没有这个问题, 但是在加入了一些元素后就出现了这个问题。
按照 Android 的官方开发文档, 获取 NavigationController
对象应当使用 supportFragmentManager.findFragmentById()
方法来获取对应的 Fragment
对象后再转换为 NavHostFragment
对象, 再通过 NavHostFragment
的 getNavController()
方法来获取。
然而, 实际上并没有 supportFragmentManager
这么个类。按照驼峰命名法的原则, 这个 supportFragmentManager
应当是一个方法而不是一个对象,可能是相关文档出现了问题,应当使用 getSupportFragmentManager()
方法来替换 supportFragmentManager
。
最终的解决代码如下所示:
NavHostFragment navHostFragment =
(NavHostFragment) getSupportFragmentManager()
.findFragmentById(R.id.nav_host_fragment);
NavController navController = navHostFragment.getNavController();
NavigationUI.setupActionBarWithNavController(this, navController,
appBarConfiguration);
NavigationUI.setupWithNavController(navView, navController);