android - 有没有办法在 Android 中使用 Paging Library 3.0 实现基于游标的分页?

标签 android kotlin android-recyclerview android-jetpack android-paging-library

我正在使用一个休息 API,它使用基于游标的分页来显示一些结果。我想知道我是否可以使用 Paging Library 3.0对其进行分页。我一直在浏览一些媒体和文档,但似乎找不到实现它的方法。如果你们中的任何人找到了任何解决方案,我会很高兴收到它!
api 响应分页如下所示:

"paging": {
    "previous": false,
    "next": "https://api.acelerala.com/v1/orders/?store_id=4&after=xyz",
    "cursors": {
        "before": false,
        "after": "xyz"
    }
}

最佳答案

在 kotlin 中,这里是示例。
在 Activity 或某处:

viewModel.triggerGetMoreData("data").collectLatest {
                mAdapter.submitData(it)
            }
在 View 模型中:
fun triggerGetMoreData(data: String): Flow<PagingData<SampleData>> {
    val request = ExampleRequest(data)
    return exampleRepository.getMoreData(request).cachedIn(viewModelScope)
}
在存储库中:
fun getMoreData(request: ExampleRequest): Flow<PagingData<ExampleData>> {
    return Pager(
        config = PagingConfig(
            pageSize = 30,
            enablePlaceholders = false
        ),
        pagingSourceFactory = { ExamplePagingSource(service, request) }
    ).flow
}
class ExamplePagingSource (
private val service: ExampleService,
private val request: ExampleRequest): PagingSource<Int, ExampleData>() {

override suspend fun load(params: LoadParams<Int>): LoadResult<Int, ExampleData> {
    return try {
        val pageIndex = params.key ?: 0
        val request = request.copy(index = (request.pageNum.toInt() * pageIndex).toString())
        when (val result = service.getMoreData(request)) { // call api
            is NetworkResponse.Success -> {
                val listData = result.body.items?.toData()?: listOf()
                LoadResult.Page(
                    data = listData,
                    prevKey = if (pageIndex == 0) null else pageIndex - 1,
                    nextKey = if (listData.isEmpty()) null else pageIndex + 1
                )
            }
            else -> LoadResult.Error(result.toError())
        }
    } catch (e: Exception) {
        e.printStackTrace()
        LoadResult.Error(e)
    }
}
}

关于android - 有没有办法在 Android 中使用 Paging Library 3.0 实现基于游标的分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66979100/

相关文章:

android - 追加问号到url改造android

android - 聚焦/点击recyclerview

android - Recyclerview.notifyItemInserted() 复制列表项

java - 定期更新 RecyclerView 上的项目

android - 自定义滑动动画(倾斜、卡片组、3D 等)

android - Android 4.x 中的 SSL 客户端身份验证

java - 更改 TornadoFX TableView 行背景颜色,同时仍突出显示所选行

kotlin - Kotlin 函数真的是一流的类型吗?

android - 无法在 RoomDB Dao 中使用挂起功能

java - 如果用户已从存储目录中删除项目,如何从 recyclerview 中删除项目?