0

将 LiveData 用于带有过滤器的 RecyclerView 时,代码通常如下所示:

视图模型.kt

private val selectedCategory = MutableLiveData<Category>()
val channels: LiveData<List<Channel>>
...
init{
channels = Transformations.switchMap(selectedCategory){ category ->
            category?.let { repository.getChannelsByCategory(category) }
        }
}

fun filterByCategory(category: Category?){
        category?.let {
            selectedCategory.postValue(category)
        }
 }

但是现在,我开始使用 ObjectBox,但我一直坚持使用 ObjectBoxLiveData。转换不适用于此处:

ViewModelObjectBox.kt

private val selectedCategory = MutableLiveData<Category>()
val channels: ObjectBoxLiveData<List<Channel>>
...
init{
channels = Transformations.switchMap(selectedCategory){ category ->
            category?.let { repository.getChannelsByCategory(category) } // This is not working.
        }
}

如何在这里进行?

4

1 回答 1

0

目前我使用“MediatorLiveData”解决了这个问题。这是一个例子:

class ChannelViewModel {
...
private val selectedCategory: MutableLiveData<Category> = MutableLiveData()
val channelData = MediatorLiveData<List<Channel>>()

 init{
      channelData.addSource(selectedCategory) {
      channelData.value = this.channelRepository.getChannelsByCategory(it)
 }

  fun filterByCategory(category: Category){
        selectedCategory.value = category
    }
...
}

如果有更好的方法,我很想看看。

于 2022-01-26T16:26:25.097 回答