【发布时间】:2021-05-25 16:19:13
【问题描述】:
我正在尝试使用Android Paging Library 3 实现基于光标的分页(基于GraphQL Relay spec),但我不知道如何实现getRefreshKey。
这是我尝试过的:
data class PagingKey(
val before: String? = null,
val after: String? = null,
)
class MoviePagingSource() : PagingSource<PagingKey, Movie>() {
override suspend fun load(params: LoadParams<PagingKey>): LoadResult<PagingKey, Movie> {
return try {
val response = fetchMovies(
before = params.key?.before,
after = params.key?.after,
pageSize = params.loadSize,
)
LoadResult.Page(
data = response.edges.map { mapEdgeToMovie(it) },
prevKey = if (response.pageInfo.hasPreviousPage) PagingKey(
before = response.pageInfo.startCursor
) else null,
nextKey = if (response.pageInfo.hasNextPage) PagingKey(
after = response.pageInfo.endCursor
) else null,
)
} catch (exception: Exception) {
LoadResult.Error(exception)
}
}
override fun getRefreshKey(state: PagingState<PagingKey, Movie>): PagingKey? {
// TODO: What to return here?
}
}
在所有示例中,我发现页码只是递增/递减,但这不适用于光标。
实现这一点的正确方法是什么?
在它被错误地标记为重复之前,我已经看到了this question。这不能回答我的问题,因为他们的 API 被称为 service.getOrders(query, params.key ?: "", 10),而不是像上面的 fetchMovies 这样的单独的 before/after 参数。
【问题讨论】:
标签: android kotlin android-jetpack android-paging android-paging-3