【发布时间】:2020-11-20 16:49:41
【问题描述】:
我有一个名为 selectedModuleTab 的实时数据,其中包含一些变量,例如 filters 我需要将这些过滤器传递给数据源存储库 crmRepo 以便从服务器获取数据。
我刚开始使用 Paging Library 3.0,但我不知道如何在每次过滤器更改时修改 PagingSource 类。
我尝试使用转换,但每次过滤器更改时我都需要创建 Pager,这会导致返回此视图后滚动位置丢失。
如何在每次 livedata 更改 (selectedModuleTab) 时修改 PageSource 类?
在我的 ViewModel 中有这个 LiveData:
val recordsList = Pager(PagingConfig(pageSize = 10),
pagingSourceFactory = { RecordListPagingSource(crmRepo, selectedModuleTab.value) })
.liveData
.cachedIn(viewModelScope)
这是我的 PageSource 类:
class RecordListPagingSource(private val crmRepo: CrmRepository, private val moduleTab: ModuleTab?) :
PagingSource<Int, SmallRecordModel>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, SmallRecordModel> {
return try {
val page = params.key ?: 0
LoadResult.Page(
data = crmRepo.getRecordsListFromModuleSuspended(
ACCOUNT_MODULE,
(page * 10),
moduleTab?.tabFilters,
moduleTab?.tabLayout
),
prevKey = page - 1,
nextKey = page + 1
)
} catch (e: Exception) {
LoadResult.Error(e)
}
}
}
【问题讨论】:
标签: android kotlin mvvm android-jetpack android-paging