【发布时间】:2021-12-27 14:05:55
【问题描述】:
我正在尝试将我的搜索功能与 Paging 3 一起使用。我检查了我的 addQuery() 函数,当我进行搜索时,我的 _repoQuery 值不为空。但是当我尝试将值传递给 Pager {} 时,它始终为空。我知道,因为它总是会显示与默认值(“花”)相对应的书籍列表。有谁知道我在搜索时如何将 _repoQuery 值传递给 Pager {}?
class MainViewModel () : ViewModel() {
// Queries
private val _repoQuery = MutableLiveData<String?>()
private val _filter = MutableLiveData<String?>()
val reusableQuery = MutableLiveData<String?>()
private val repo = Repo
fun addFilter(filter: String?) {
_filter.value = filter
}
fun addQuery(query: String) {
_repoQuery.value = query // Here _repoQuery.value exists
reusableQuery.value = _repoQuery.value
}
val books: Flow<PagingData<Volume>> = Pager(PagingConfig(pageSize = 40)) {
BookListSource(repo, bookFilter = _filter.value, query = _repoQuery.value?:"flowers")
}.flow.cachedIn(viewModelScope) // Here _repoQuery.value is null
}
解决方案
这最终奏效了:
val repoQuery = _repoQuery.switchMap {
liveData {
emit(Pager(PagingConfig(pageSize = 40)) {
BookListSource(repo, bookFilter = _filter.value, query = _repoQuery.value)
}.flow.cachedIn(viewModelScope))
}
}
我的理解是 liveData 在到达时会发出新的结果...
【问题讨论】:
标签: android kotlin android-livedata android-paging android-paging-3