【问题标题】:Load more data on click of an item in Paging 3 library单击 Paging 3 库中的项目加载更多数据
【发布时间】: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 项中。我们如何做到这一点?

【问题讨论】:

    标签: android kotlin flow android-paging-3


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-11-17
      • 1970-01-01
      • 2018-12-19
      • 2020-11-20
      • 2016-12-14
      • 1970-01-01
      相关资源
      最近更新 更多