单击 Paging 3 库中的项目加载更多数据

Posted

技术标签:

【中文标题】单击 Paging 3 库中的项目加载更多数据【英文标题】:Load more data on click of an item in Paging 3 library 【发布时间】:2021-12-13 11:13:28 【问题描述】:

我正在使用 paging 3 库,我想通过单击回收站中的按钮来加载下一页项目。

        //for first case it will be null, then we can pass some default value, in our case it's 1
        val pageNumber = params.key ?: DEFAULT_PAGE_INDEX
        PAGE_NUMBER = DEFAULT_PAGE_INDEX
        return try 
            val response = tasksApi.getTasks(
                token = "Bearer " + NicoPrefs.getSSOAccessToken(),
                status = pagingTasksInput.status,
                type = pagingTasksInput.type,
                activity = pagingTasksInput.activity,
                sort = pagingTasksInput.sort,
                sortBy = pagingTasksInput.sortBy,
                pageNumber = if (pagingTasksInput.pageNumber > 0) pagingTasksInput.pageNumber else pageNumber,
                pageLimit = pagingTasksInput.pageLimit,
                assignee = pagingTasksInput.assignee
            )
            val data = pagedResponse?.result
         
            LoadResult.Page(
                data.orEmpty(),
                prevKey = if (pageNumber == DEFAULT_PAGE_INDEX) null else pageNumber - 1,
                nextKey = null
            )
         catch (exception: IOException) 
            return LoadResult.Error(exception)
         catch (exception: HttpException) 
            return LoadResult.Error(exception)
        
     

我添加了页脚

map 
      it.insertFooterItem(TaskDto(footer = "FOOTER", description = "Load more"))
    

当我点击“加载更多”时,更新页码并进行 API 调用(我的页面限制为 50)

viewLifecycleOwner.lifecycleScope.launch 
            testViewModel.getPagingTasks(getAssignedTasks)
                .collectLatest  response ->
                    Timber.d("paging item = $assignedTasksPagingAdapter?.snapshot()")
                    assignedTasksPagingAdapter?.submitData(
                        response
                    )
                
        

我必须将接下来的 50 项附加到回收站视图中现有的 50 项中。我们如何做到这一点?

【问题讨论】:

【参考方案1】:

Paging 中的页面获取是由通过 .get(index) 对演示者调用的项目访问触发的(例如,PagingDataAdapter)。如果您需要在访问项目时避免页面抓取,您可以致电.peek(index)

【讨论】:

以上是关于单击 Paging 3 库中的项目加载更多数据的主要内容,如果未能解决你的问题,请参考以下文章

Jetpack-paging3看会了吗

Jetpack Compose 无限加载列表(滚到底部自动加载更多)

Paging 3 PagingSource 类根本不加载

Jetpeck paging3实践——无限加载网页列表数据

深入探索 Paging 3.0: 分页加载来自网络和数据库的数据 | MAD Skills

使用 Jetpack Compose 无限加载 Android Paging 3 库而无需滚动