【发布时间】:2021-12-28 01:51:18
【问题描述】:
我正在尝试从 LiveData 切换到 StateFlow 以填充我的 ListAdapter。
我目前有一个MutableLiveData<List<CustomClass>>,我正在观察它来更新列表适配器:
viewModel.mutableLiveDataList.observe(viewLifecycleOwner, Observer {
networkIngredientAdapter.submitList(it)
}
这很好用。现在我将 viewModel 中的MutableLiveData<List<CustomClass>?> 替换为MutableStateFlow<List<CustomClass>?>,如下所示:
private val _networkResultStateFlow = MutableStateFlow<List<IngredientDataClass>?>(null)
val networkResultStateFlow : StateFlow<List<IngredientDataClass>?>
get() = _networkResultStateFlow
fun loadCustomClassListByNetwork() {
viewModelScope.launch {
//a network request using Retrofit
val result = myApi.myService.getItems()
_networkResultStateFlow.value = result
}
}
我正在这样的片段中收集新列表:
lifecycleScope.launchWhenStarted {
viewModel.networkResultStateFlow.collect(){
list -> networkIngredientAdapter.submitList(list)}
}
但是,当我调用 loadCustomClassListByNetwork() 时,列表适配器不会更新。为什么我无法收集价值
【问题讨论】:
-
尝试将launchWhenStarted替换为launchWhenCreated
-
还将
- ?>(null) 替换为
- >(emptyList()) 以获得干净的代码
标签: android kotlin-coroutines kotlin-flow kotlin-stateflow