Android Navigation:MainActivity does not have a NavController

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 对象, 再通过 NavHostFragmentgetNavController() 方法来获取。

然而, 实际上并没有 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);


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部