You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:20:35