作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 GraphQL Relay spec 实现基于光标的分页(基于 Android Paging Library 3 ) ,但不知道如何实现 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?
}
}
在所有示例中,我可以发现页码只是递增/递减,但这不适用于游标。
service.getOrders(query, params.key ?: "", 10)
而不是单独的
before
/
after
像
fetchMovies
这样的参数以上。
最佳答案
您可以做的是获取要重新加载的页面的索引,然后转到下一页获取prevKey
或上一页获取nextKey
.
override fun getRefreshKey(
state: PagingState<PagingKey, Movie>,
): PagingKey? {
return state.anchorPosition?.let { anchorPosition ->
val anchorPageIndex = state.pages.indexOf(state.closestPageToPosition(anchorPosition))
state.pages.getOrNull(anchorPageIndex + 1)?.prevKey ?: state.pages.getOrNull(anchorPageIndex - 1)?.nextKey
}
}
关于android - 如何为基于光标的分页实现 PagingSource.getRefreshKey - Android Jetpack Paging 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67691903/
我从 Paging 2 迁移到 Paging 3 库,现在我使用 PagingSource从服务器加载数据页面。但我无法理解 getRefreshKey必须在那里重写的方法。我找到了一些代码示例,如何
我正在尝试使用 GraphQL Relay spec 实现基于光标的分页(基于 Android Paging Library 3 ) ,但不知道如何实现 getRefreshKey . 这是我尝试过的
我是一名优秀的程序员,十分优秀!