我在 ViewModel 里面得到了所需要的数据,两个同时加载view的地方都需要用到这一份数据,现在出现的情况是:
- 两个地方都去调用getAllInfo(), 那么就没有问题
- 如果只是其中一个地方去调用 getAllInfo()的话,就会导致另一个获取不到数据,虽然都观察了 LiveData对象,但是调用getAllInfo()的时候加载数据需要时间,因为两个地方都是同时加载view的的,所以没有调用getAllInfo()方法的地方就会获取到空数据
有没有什么办法在数据完成的时候通知UI更新
class AppViewModel : ViewModel() {
var appBeanList = MutableLiveData<List<InfoBean>>()
val refreshing = MutableLiveData<Boolean>(true)
fun getAllInfo(context: Context) {
viewModelScope.launch {
flow<List<InfoBean>> {
.... 具体操作省略
emit(data)
}.flowOn(Dispatchers.Default)
.catch { exception -> logW(exception) }
.collect{
appBeanList.value = it
refreshing.value = false
// 数据加载完成时,如何通知界面?
}
}
}
}
你这个想法此对吧。数据跟获取是独立的。你获取,然数据进LiveData里,LiveData根据注册过来的进行通知。你不有通知到是不是生命周期不在活跃的时候,有另外一个监听方式忽略掉生命周期的。