问题描述
我在我的项目中使用了 Android Paging 3 库,以便逐页加载我的数据。在这个项目中,我没有使用数据库,这意味着我使用的是 network only requests
。问题是它不是根据用户滚动加载页面,而是首先加载所有页面。这是我用于项目分页部分的代码:
我的 RxPagingSource 类:
class ReviewPagingSource constructor(
private val network: Network,private val filter: ReviewFilter,private val config: Config,private val cacheFirstResponse: Boolean
) : RxPagingSource<Int,Review>() {
override fun loadSingle(params: LoadParams<Int>): Single<LoadResult<Int,Review>> {
return network.getReviews(
filter.copy(page = (params.key ?: 0),pageSize = params.loadSize),config,cacheFirstResponse
)
.subscribeOn(Schedulers.io())
.map { toLoadResultPage(it,params) }
.onErrorResumeNext {
when (it) {
is TimeoutException,is NoInternetException,is NetworkException,is UnexpectedResponseException -> Single.just(
LoadResult.Error(it)
)
else -> Single.error(it)
}
}
}
private fun toLoadResultPage(
response: DataResponse<Review>,params: LoadParams<Int>
): LoadResult<Int,Review> {
val page = params.key ?: 0
return LoadResult.Page(
response.results!!,if (page <= 0) null else page - 1,if (response.count ?: response.results?.count() ?: 0 < params.loadSize) null else page + 1,LoadResult.Page.COUNT_UNDEFINED,LoadResult.Page.COUNT_UNDEFINED
)
}
override fun getRefreshKey(state: PagingState<Int,Review>): Int? {
return state.anchorPosition?.let { state.closestPagetoPosition(it) }?.nextKey
}
}
我的寻呼机是:
Pager(PagingConfig(pageSize = 5,initialLoadSize = 5,))
{ ReviewPagingSource(network,filter,true) }
.flow.cachedIn(viewmodelScope)
相关 Gradle 部分:
implementation "androidx.paging:paging-runtime-ktx:3.0.0-alpha13"
implementation "androidx.paging:paging-rxjava3:3.0.0-alpha13"
任何帮助将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)