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 ...
 }
 ...