添加依赖
implementation 'android.arch.paging:runtime:2.1.0'
创建Adapter继承PagedListAdapter
并在类里创建viewholder,获取需要的控件
public class AdapterPaging extends PagedListAdapter <Student, AdapterPaging.MyViewHolder>{
static class MyViewHolder extends RecyclerView.ViewHolder{
TextView textView;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.text_view);
}
}
}
当然还需要实现父类方法以及创建构造器
public AdapterPaging() {
super(new DiffUtil.ItemCallback<Student>() {
@Override
public boolean areItemsTheSame(@NonNull Student oldItem, @NonNull Student newItem) {
return oldItem.getId() == newItem.getId();
}
@Override
public boolean areContentsTheSame(@NonNull Student oldItem, @NonNull Student newItem) {
return oldItem.getStudentNumber() == newItem.getStudentNumber();
}
});
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.cell,parent,false);
return MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Student student = getItem(position);
if (student == null){//判断是否为空,因为分页加载,容器可能大于数据
holder.textView.setText("loading");
}else {
holder.textView.setText(String.valueOf(student.getStudentNumber()));
}
}
在Activity中
adapterPaging = new AdapterPaging();
recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
recyclerView.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.VERTICAL));
recyclerView.setAdapter(adapterPaging);//设置adaptrer
allStudentsLivePaged = new LivePagedListBuilder<>(studentDao.getAllStudents(),30)
.build();//获取数据
allStudentsLivePaged.observe(this, new Observer<PagedList<Student>>() {
@Override
public void onChanged(PagedList<Student> students) {
adapterPaging.submitList(students);//每次数据进来都传给adapterPaging.submitList
}
});