我正在尝试使用android live数据从片段中观察视图模型中异步任务的完成状态。因此,我考虑了使用LiveData remove Observer after first callback
中的ObserveOnce // in ViewModel
var status= MutableLiveData<Boolean>()
fun asyncTask(){
// do some async task
asyncTask.addOnSuccessListener{
status.value = true
}
asyncTask.addOnFaiureListener{
status.value = false
}
}
// In Fragment
fun startProcess(){
viewmodel.status.value = false
viewmodel.asyncTask
viewmodel.status.observeOnce(viewLifecycleOwner, Observer { it ->
if(it){
Toast.maketext(requireActivity(),"Task Done",Toast.LENGTH_SHORT).maketext()
}else{
Toast.maketext(requireActivity(),"Task Failed",Toast.LENGTH_SHORT).maketext()
}
})
}
这里的问题是,这个watchOnce在初始化之后立即被调用,并且始终显示为false。
我不明白这里出了什么问题!
答案 0 :(得分:0)
您实际上为状态设置了一个值,一旦观察者处于活动状态,该值就会发出。
If LiveData already has data set, it will be delivered to the observer.
...
When data changes while the owner is not active, it will not receive any updates. If it becomes active again, it will receive the last available data automatically.
除非需要默认值开头,否则请不要设置初始值。