【问题标题】:Pagination is not working after refresh() is called. [Paging 3 Library]调用 refresh() 后分页不起作用。 [第 3 页库]
【发布时间】:2022-07-25 20:25:11
【问题描述】:

我目前正在使用分页 3 库。我能够填充列表并且分页按预期工作。但是当我通过使用 pull 刷新两次调用 adapter.refresh() 方法时,分页停止工作。

我浏览了文档并阅读了很多文章,但还没有成功。

还有一件事,当我点击拉动刷新时,我无法清空列表。我尝试调用 PagingSource 的 invalidate() 方法,但它使应用程序崩溃。

https://www.dropbox.com/s/0k2g9mlktv5gee6/22-05-22-10-26-37.mp4?dl=0

VideoPagingSource.kt

class VideoPagingSource(
    private val apiInterface: ApiInterface,
    private val schoolId: String,
    private val ordering: String?,
    private val courseId: String?,
    private val moduleId: String?,
    private val searchText: String?
) : PagingSource<Int, Video>() {


    override fun getRefreshKey(state: PagingState<Int, Video>): Int? = null

    override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Video> {
        val pageNumber = params.key
        return try {
            val response = apiInterface.getVideos(schoolId, ordering, courseId, moduleId, searchText, pageNumber)
            val pagedResponse = response?.body()
            var nextPageNumber: Int? = null
            if (pagedResponse?.links?.next != null) {
                val uri = Uri.parse(pagedResponse.links.next)
                val nextPageQuery = uri.getQueryParameter("page")
                nextPageNumber = nextPageQuery?.toInt()
            }

            LoadResult.Page(
                data = response?.body()?.objects.orEmpty(),
                prevKey = null,
                nextKey = nextPageNumber
            )
        } catch (e: Exception) {
            LoadResult.Error(e)
        }
    }


}

PreClassViewModel.kt

class PreClassViewModel @Inject constructor(private val repository: PreClassRepository) :
    ViewModel() {

    private val queryParamLiveData = MutableLiveData<QueryParams>()

    val videosLiveData = queryParamLiveData.switchMap {

        repository.getVideos(
            schoolId = it.extraArgs[0],
            ordering = it.extraArgs[1],
            courseId = it.courseId,
            moduleId = it.chapterId,
            searchText = it.searchText
        ).cachedIn(viewModelScope)

    }


    fun setQueryParam(queryParams: QueryParams){
        queryParamLiveData.value = queryParams
    }

}

【问题讨论】:

    标签: android android-paging android-paging-3


    【解决方案1】:

    我遇到了类似的问题,适配器只提供了refresh() 之后的第一页。原因是提供给PagingConfigpageSize 错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 2014-04-05
      • 2018-04-30
      相关资源
      最近更新 更多