问题描述
我正在使用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 ...
}
...