前面已经介绍了Room、WorkManager、Lifecycle、ViewModel和LiveData这些架构组件,接下来介绍Paging分页组件和Navigation导航框架,这两个类库在应用开发过程中也是非常常见的。
Paging组件
Android应用中列表是一种很常见的展现形式,多条数据展示就会使用多个界面元素,如果大量的数据一次性全部加入应用中会导致内存极度消耗,而且用户也很难一次性完全浏览一遍,列表数据通常都是通过分页加载的形式展现。JetPack内部包含了支持RecyclerView分页功能的Paging组件,只需要设置数据获取来源和每页数量,组件在用户浏览列表是会自动计算下一页要请求的数据并发送请求。
使用步骤
- 导入框架
implementation "android.arch.paging:runtime:$rootProject.paging_version“
- 编写数据库
@Query("select * from tb_movie")
DataSource.Factory<Integer, MovieEntity> getAllMovies();
- 编写列表界面
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter = new PagedMovieAdapter());
- 生成LivedPagedList对象
pagedList = new LivePagedListBuilder<>(repository.getAllMovies(), new PagedList.Config.Builder()
.setPageSize(10).setPrefetchDistance(2).setInitialLoadSizeHint(20).build()).build();
pagedList.observe(this, new Observer<PagedList<MovieEntity>>() {
public void onChanged(@Nullable PagedList<MovieEntity> movieEntities) {
adapter.submitList(movieEntities);
}});
Demo演示
前面通过Room生成MovieEntity对象的数据库表并且定义获取所有电影数据的接口,需要注意返回的对象类型是DataSource.Factory类型,之后就按照使用步骤中的实现方式将PagedList提交到PagedAdapter中。
实现原理
从前面的De