Android分页库-PositionalDataSource问题

时间:2019-12-19 09:06:28

标签: android android-paging android-paging-library

我可以从服务器获取总数的记录,因此我正在使用PositionalDataSource进行网络呼叫。一切正常,但有一个问题:即使我不滚动,分页库仍继续从服务器获取所有数据。如何解决这个问题呢? 使用:androidx.paging:paging-runtime-ktx:2.1.1

示例:

override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback<Doctor>) {
    fetchDataFromApi(params.requestedStartPosition, params.pageSize) { list, totalCount ->
        callback.onResult(list, 0, totalCount)
    }
}
override fun loadRange(params: LoadRangeParams, callback: LoadRangeCallback<Doctor>) {
    fetchDataFromApi(params.startPosition, params.loadSize) { list, totalCount ->
        callback.onResult(list)
    }
}

PagedList.Config.Builder()
        .setPageSize(14)
        .setPrefetchDistance(4)
        .setInitialLoadSizeHint(14)
        .setEnablePlaceholders(true)
        .build()

1 个答案:

答案 0 :(得分:2)

这听起来像是我最近两天都在调查的类似问题。对我来说,原来我已经将RecyclerView包裹在NestedScrollView中。 但是,根据此issue on Google tracker,分页库没有对此的内置支持。

当您将recyclerview放置在无限滚动的父级中时,由于父级提供了无限的尺寸,因此它将布局其所有子级。

基本上NestedScrollView继续触发获取更多数据,就像屏幕与完整列表一样长

如果您的情况也是如此,有两个选择:

  1. 更改布局设置,无需使用NestedScrollView

  2. 这是code example gist,它帮助我创建了自定义[SmartNestedScrollView]。请注意,您还必须在此自定义容器上设置android:fillViewport="true",并更新RecyclerView以使其高度为wrap_content,并从其中删除nestedScrollingEnabled标志。