我有一个名为 navigationArgs 的 LiveData:
private val _navigationArgs = MutableLiveData<Item>()
val navigationArgs: LiveData<Item>; get() = _navigationArgs
存储要传递给下一个 fragment 的参数。它附加到观察者,以便在值更改时进行导航:
viewModel.navigationArgs.observe(this, Observer{
//navigation code
viewModel.finishedNavigating()
})
其中finishedNavigating()中_navigationArgs的值设置为null:
fun finishedNavigating(){
_navigationArgs.value = null
}
当 finishedNavigating()
包含在观察者中时,当 _navigationArgs
值更改时,应用程序甚至没有导航就挂起。
为什么会这样?我正在使用 Android Studio 4.0 Canary。谢谢。
最佳答案
当你给 _navigationArgs.value
赋值时,Observer 会自动调用 viewModel.navigationArgs.observe
中使用的代码(navigationArgs
和 _navigationArgs
是相同的对象,因为 navigationArgs
有 getter,返回 _navigationArgs
。
在您的情况下,您在 finishedNavigating()
中将 null
分配给 _navigationArgs.value
,这会调用 Observer
,它再次调用 finishedNavigating()
等等...
这里只有递归。
您应该添加递归退出条件。例如:
viewModel.navigationArgs.observe(this, Observer{
//navigation code
if (it != null) //don't call finishedNavigating, when null passed in to _navigationArgs.value
viewModel.finishedNavigating()
})
关于android - 当 LiveData 被赋予空值时应用程序挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59014613/