我在 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根据注册过来的进行通知。你不有通知到是不是生命周期不在活跃的时候,有另外一个监听方式忽略掉生命周期的。