我可以从服务器获取总数的记录,因此我正在使用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()
答案 0 :(得分:2)
这听起来像是我最近两天都在调查的类似问题。对我来说,原来我已经将RecyclerView
包裹在NestedScrollView
中。
但是,根据此issue on Google tracker,分页库没有对此的内置支持。
当您将recyclerview放置在无限滚动的父级中时,由于父级提供了无限的尺寸,因此它将布局其所有子级。
基本上NestedScrollView
继续触发获取更多数据,就像屏幕与完整列表一样长
如果您的情况也是如此,有两个选择:
更改布局设置,无需使用NestedScrollView
这是code example gist,它帮助我创建了自定义[SmartNestedScrollView]。请注意,您还必须在此自定义容器上设置android:fillViewport="true"
,并更新RecyclerView
以使其高度为wrap_content
,并从其中删除nestedScrollingEnabled
标志。