【发布时间】:2020-10-05 15:44:13
【问题描述】:
我要异步操作。在 viewmodel 中,两者需要一起为 UI 工作。如何根据 de LiveData 地图中的键过滤 LiveData 列表? (列表中的对象 id 对应于 Map 键)
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
private val _allJourneys = MutableLiveData<List<Journey>>()
val allJourneys: LiveData<List<Journey>> get() = _allJourneys
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
private val _enrolledMap = MutableLiveData<Map<String, String>>()
val enrolledMap: LiveData<Map<String, String>> get() = _enrolledMap
fun getEnrolled() {
viewModelScope.launch {
progressRepository.getEnrolledJourneysMapOfUser().observeForever {
Timber.d("Map values: $it")
_enrolledMap.value = it
}
}
}
fun getJourneys() {
viewModelScope.launch {
journeysRepository.getAll().observeForever { it ->
_allJourneys.value = it.filter {
// enrolledMap.containsKey(it.id) ??? Nullpointer
}
}
}
}
【问题讨论】:
-
您想根据注册地图键过滤旅程,对吗?使用transformations 怎么样?通过这种方式,您可以将观察者移动到 UI 并传递 LiveData 引用。 MediatorLiveData 也很有用
-
@Stachu 感谢您的评论。在架构中的什么时候,我会根据地图过滤旅程?我正在使用 MVVM 和 Cloud Firestore。
-
做
journeysRepository.getAll()和progressRepository.getEnrolledJourneysMapOfUser()返回LiveData? -
@Stachu LiveData
>,确实如此。
标签: kotlin android-livedata mutablelivedata