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);
  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值