假设我有一个显示/animals
动物列表的 API 资源,我们称之为/animals/{species}
两个单独PagingSource
的对象?用于分页的Codelab有一个扩展PagingSource
名为的类GithubPagingSource
,但它仅用于一个端点。我想知道正确的方法是什么。
问问题
170 次
1 回答
1
PagingSource 的单个实例应该代表支持数据集的快照,这基本上意味着如果一个页面被同一个实例删除并重新加载,则应该输出同一个页面。
但是,您可以拥有一个实现并创建它的多个实例,因此可能会推荐这样的方法:
class AnimalPagingSource(val species: String?): PagingSource<..> {
override suspend fun load(...): LoadResult<..> {
val result = if (species != null) {
return networkApi.getSpecies(species)
} else {
return networkApi.getAnimals()
}
return LoadResult.Page(result.data, ...)
}
}
稍后当您需要使用由此产生的 Flow<PagingData<..>> 时,您可以在多个 Pager 之间切换:
speciesFlow
.flatMapLatest { species ->
Pager(...) { AnimalPagingSource(species) }.flow
}
.cachedIn(scope)
.collectLatest { pagingData ->
adapter.submitData(pagingData)
}
于 2020-08-06T04:30:52.030 回答