Kotlin资料比较多,java资料比较少。
大家推荐的demo也是kotlin,不过看起来不太困难。
java demo参见:Android Paging简单使用,没有多余库,而且只用java
扩展功能请自行研究。
1. 添加依赖
def paging_version = "1.0.0"//目前最新稳定版本
implementation "android.arch.paging:runtime:$paging_version"
2. 数据源
LiveData<PagedList<DataBean>>用LivePagedListBuilder生成,LivePagedListBuilder用 DataSource.Factory<Integer,DataBean>和PagedList.Config.Builder生成,DataSource.Factory<Integer,DataBean>用 PositionalDataSource<DataBean>生成
PositionalDataSource是DataSource的子类
LiveData<——LivePagedListBuilder<——DataSource.Factory<Integer,DataBean>(+PagedList.Config.Builder)<——PositionalDataSource
mLiveData = new LivePagedListBuilder<>(new MyDataSourceFactory(), config)
.build();
/*DataSource.Factory*/
private class MyDataSourceFactory extends DataSource.Factory<Integer, DataBean> {
@Override
public DataSource<Integer, DataBean> create() {
return new MyDataSource();
}
}
/*DataSource*/
private class MyDataSource extends PositionalDataSource<DataBean> {
@Override
public void loadInitial(@NonNull LoadInitialParams params, @NonNull LoadInitialCallback<DataBean> callback) {
callback.onResult(loadData(0, 10), 0, 10);
}
@Override
public void loadRange(@NonNull LoadRangeParams params, @NonNull LoadRangeCallback<DataBean> callback) {
callback.onResult(loadData(params.startPosition, 10));
}
}
模拟获取数据
/**
* 模拟获取数据
*
* @param startPosition
* @param count
* @return
*/
private List<DataBean> loadData(int startPosition, int count) {
List<DataBean> list = new ArrayList();
for (int i = 0; i < count; i++) {
DataBean data = new DataBean();
data.id = startPosition + i;
data.content = "测试的内容=" + data.id;
list.add(data);
}
return list;
}
3. 数据绑定
mLiveData.observe(this, new Observer<PagedList<DataBean>>() {
@Override
public void onChanged(@Nullable PagedList<DataBean> dataBeans) {
mMyAdapter.submitList(dataBeans);
}
});
4. 创建adapter
mMyAdapter = new MyAdapter(mItemCallback);
DiffUtil判断数据是否改变。
/**
* 数据是否改变了
*/
private DiffUtil.ItemCallback<DataBean> mItemCallback = new DiffUtil.ItemCallback<DataBean>() {
@Override
public boolean areItemsTheSame(DataBean oldItem, DataBean newItem) {
return oldItem.id == newItem.id;
}
@Override
public boolean areContentsTheSame(DataBean oldItem, DataBean newItem) {
return oldItem == newItem;
}
};
adapter需要继承PagedListAdapter。
public class MyAdapter extends PagedListAdapter<DataBean, MyViewHolder> {
protected MyAdapter(@NonNull DiffUtil.ItemCallback<DataBean> diffCallback) {
super(diffCallback);
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(InitUtil.getApplicationContext()).inflate(android.R.layout.simple_list_item_2, null);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
DataBean item = getItem(position);
holder.getText1().setText("position = " + item.getId());
holder.getText2().setText(item.getContent());
}
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private final TextView mText1;
private final TextView mText2;
public MyViewHolder(View itemView) {
super(itemView);
mText1 = itemView.findViewById(android.R.id.text1);
mText2 = itemView.findViewById(android.R.id.text2);
}
public TextView getText1() {
return mText1;
}
public TextView getText2() {
return mText2;
}
}

本文详细介绍Paging库在Android开发中的使用方法,包括依赖添加、数据源设置、数据绑定及Adapter创建。通过实例演示如何利用Kotlin或Java实现分页加载,适合初学者快速上手。
632

被折叠的 条评论
为什么被折叠?



