依賴
def paging_version = "2.1.2"
implementation "androidx.paging:paging-runtime:$paging_version" // For Kotlin use paging-runtime-ktx
// alternatively - without Android dependencies for testing
testImplementation "androidx.paging:paging-common:$paging_version" // For Kotlin use paging-common-ktx
在Room的基礎(chǔ)上:
- 1.數(shù)據(jù)庫取出數(shù)據(jù)方法(Dao):
@Query("SELECT * FROM WORD ORDER BY ID DESC")
DataSource.Factory<Integer,Word> getAllWords();
- 2.LiveData的獲得方式:
allWordsPagedListLive = new LivePagedListBuilder<>(wordDao.getAllWords(), 2).build(); // 2為一次讀取的數(shù)據(jù)數(shù)量
- 3.Adapter: 繼承
PagedListAdapter
public class MyPagedAdapter extends PagedListAdapter<Word, MyPagedAdapter.MyViewHolder> {
protected MyPagedAdapter() {
super(new DiffUtil.ItemCallback<Word>() {
@Override
public boolean areItemsTheSame(@NonNull Word oldItem, @NonNull Word newItem) {
return oldItem.getId() == newItem.getId();
}
@Override
public boolean areContentsTheSame(@NonNull Word oldItem, @NonNull Word newItem) {
return oldItem.getWord().equals(newItem.getWord());
}
});
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.cell_card2,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Word word = getItem(position);
if (word == null){
holder.tvE.setText("loadingddddddddddddddd");
Log.i("nanmu","null");
}else {
holder.tvNum.setText(String.valueOf(position + 1));
holder.tvE.setText(word.getWord());
// holder.tvC.setText(word.getTranslate());
}
}
static class MyViewHolder extends RecyclerView.ViewHolder{
TextView tvNum, tvC, tvE;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
tvNum = itemView.findViewById(R.id.tv_num);
tvC = itemView.findViewById(R.id.tv_c);
tvE = itemView.findViewById(R.id.tv_e);
}
}
}
- 4.更新方式:可選加回調(diào)
allWordsPagedListLive.observe(this, new Observer<PagedList<Word>>() {
@Override
public void onChanged(final PagedList<Word> words) {
adapter.submitList(words);
words.addWeakCallback(null, new PagedList.Callback() {
@Override
public void onChanged(int position, int count) {
Log.d("mylog",String.valueOf(words));
}
@Override
public void onInserted(int position, int count) {
}
@Override
public void onRemoved(int position, int count) {
}
});
}
});