简短问题:
如何正确处理使用页码和大小加载新页面的API,以及使用BoundaryCallback
类在Architecture组件的Paging库中处理数据库+网络?
研究和解释
目前,在用于Architecture组件的Paging库中使用的BoundaryCallback
类,接收的参数是列表中元素的实例,而不是该元素所在位置的实际上下文。这发生在onItemAtFrontLoaded
和onItemAtEndLoaded
。
我的API应该接收页面和页面大小来加载下一个数据块。作为分页列表构建器的一部分添加的边界回调应该基于预取距离和页面大小告诉您何时加载下一页数据。
由于API需要提供页面编号和页面大小,因此我看不到通过仅从onItemAtFrontLoaded
和onItemAtEndLoaded
中提供的列表中的一个元素发送它的方法。检查此链接中的Google示例,他们使用最后一个元素的名称来获取下一个元素,但这并不适用于具有页面+大小的API。
PagedKeyedDatasource
的网络示例,但是没有关于如何将其与数据库和BoundaryCallback混合的示例或线索。
编辑:
到目前为止,我找到的唯一解决方案是在共享首选项中存储最后加载的页面,但这听起来像是个小技巧。请参考官方意见https://github.com/googlesamples/android-architecture-components/issues/252#issuecomment-392119468。