PagingSource起始偏移异常:请求起始值不符合预期需求
问题需求与现象
需要实现分页请求逻辑:首次请求start参数为1,后续依次为101、201……,limit参数始终固定为100。但当前PagingSource的起始偏移总是从pageSize(100)开始,调整PagingConfig各项配置后仍无法实现预期行为。
现有PagingSource代码
val page = params.key ?: 1 val size = params.loadSize val from = page * size val data = homeRepository.getLatest(start = from, limit = size) val coinList = data.getOrNull()
现有ViewModel代码
val coinList = Pager( pagingSourceFactory = { HomePagingSource(repo) }, config = PagingConfig(pageSize = 100, prefetchDistance = 0, initialLoadSize = 100) ).flow.cachedIn(viewModelScope)
解决方案
问题核心在于from参数的计算逻辑错误,导致首次请求的start直接变为100而非1。修改计算方式即可解决:
val page = params.key ?: 1 val size = params.loadSize // 调整from的计算逻辑:(页码-1)*每页数量 +1 val from = (page - 1) * size + 1 val data = homeRepository.getLatest(start = from, limit = size) val coinList = data.getOrNull() // 补充分页key处理逻辑,示例如下: val nextKey = if (coinList?.size == size) page + 1 else null return LoadResult.Page( data = coinList ?: emptyList(), prevKey = null, // 无需上拉加载前一页可设为null nextKey = nextKey )
修改后分页参数完全符合需求:
- 第1页:
(1-1)*100 +1 =1,对应start=1,limit=100 - 第2页:
(2-1)*100 +1=101,对应start=101,limit=100 - 后续页码以此类推
PagingConfig的现有配置无需调整,保持当前设置即可。
内容的提问来源于stack exchange,提问作者SNM
相关产品推荐
相关产品推荐

