八、Paging 分页加载
移动端请求后端接口时,数据库的内容很多,不可能一次性请求完,所以需要分页加载, Jetpack 的 Paging 库,为分页提供了统一解决方案。
数据源可能是网络接口或数据库,Paging 的工作原理如下:
- 在 RecyclerView 滑动过程中,会触发 PageListAdapter 类的 onBindViewHolder() 方法,将数据和 RecycleView Item 布局中的 UI 控件绑定。
- 当 RecyclerView 滑动到底部时,在 onBindViewHolder() 中调用 getItem() 方法,通知 PagedList 需加载更多数据。
- PagedList 根据 PageLIst.Config 通知 DataSourde 请求数据
- DataSource 请求数据后,交给 PagedList
- PagedList 将数据交给 PagedListAdapter 中的 DiffUtil 做对比
- RecyclerView 展示数据
8.1 PositionalDataSource 任意位置
用于从任意位置加载数据,加载固定数量,例如 start=2&count=5,通过 loadRange() 加载下一页。示例如下:
8.2 PageKeyedDataSource 分页
以页为请求单位,例如page=2&pageSize=5,通过 loadAfter() 加载下一页。示例如下:
8.3 ItemKeyedDataSource
下一页 依赖于 上一页最后一个对象 的某个字段做 key。例如上一页最后一个对象的 key 是 9527,则请求下一页时携带 since=9527&pageSize=5的参数,通过 loadAfter() 加载下一页。示例如下:
通常引入 Repository 层,封装数据库和网络请求,MVVM 架构图如下: