【发布时间】:2020-12-02 10:37:48
【问题描述】:
我正在研究新的 Android Room Paging 库
implementation "androidx.paging:paging-runtime-ktx:3.0.0-alpha09"
我的源数据库表大约有 10,000 行,我按名称字段的第一个字符过滤如下:-
道
@Query("SELECT * from citation_style WHERE citation_style_name LIKE :startsWith ORDER BY citation_style_name ASC")
fun fetch(startsWith: String): PagingSource<Int, CitationStyleDO>
存储库
fun fetch(startsWith: String): Flow<PagingData<CitationStyleDO>> {
return Pager(
PagingConfig(pageSize = 60, prefetchDistance = 30, enablePlaceholders = false, maxSize = 200)
) { database.citationStyleDao().fetch("$startsWith%") }.flow
}
视图模型
fun fetch(startsWith: String): Flow<PagingData<CitationStyleDO>> {
return repository.fetch(startsWith).cachedIn(viewModelScope)
}
片段
override fun onStartsWithClicked(startsWith: String) {
lifecycleScope.launch {
viewModel.fetch(startsWith).collectLatest { adapter.submitData(it) }
}
}
每次更改开头字符时重复使用lifecycleScope.launch {...} 是否正确?
我应该是 map{} 还是 switchMap{} 由 StartwWith 的 MutabaleLiveData<String> 触发?
【问题讨论】:
标签: android android-room android-paging-3