NavController currentDestination是否为null?

问题描述

我正在使用NavController来管理应用导航:

findNavController().navigate(action)

我在Crashlytics中遇到了一些崩溃:我发现这是因为:

MyFragment {
     ...
    myLiveData.observer(viewLifecycleOwner,Observer) {
    
        findNavController().navigate(myAction) // currentDestination is null ...
     })
     ...

navController.currentDestination?是可选的,如果为null,则应用程序崩溃并发生未处理的异常。

由于currentDestination被声明为可选项,所以我想肯定有一些合法的原因,为什么它可以为null,我不知道。预先了解任何指针。

解决方法

目标代表NavHost托管的NavGraph中的节点。 NavController仅管理流程。当NavHost未显示任何目的地时,出现的情况很少,例如:

  • 在设置NavGraph之前(因为目标位置代表图形中的位置)
  • 当您使用交易(在图表范围之外)手动为NavHost中的东西充气时

如果一个应用程序中有多个图形(例如nested graphs,但也可以是独立的),则可能有一个NavController给出了主图形目标,第二个返回了空值,等等。

,

感谢Stachu,与片段viewLifecycle有任何关系吗?

就我而言,导航是通过liveData观察器触发的,即

MyFragment {
 ...
myLiveData.observer(viewLifecyucleOwner,Observer) {

    findNavController().navigate(myAction) // currentDestination is null ...
 }
 ...

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...