ListAdapter
实际应用的一个小demo。
这里还有一个基于MVVM
的Demo中也使用到了ListAdapter。
最近了解到一个很NB的东西:ListAdapter,结合LiveData
可以很轻松的实现RecyclerView
列表的页面更新操作,由此特地写了一个Demo来实操一下。
相关参考文章:
其实简单搜一下就会发现其实还是有不少相关文章的,所以随便搜了两个用于基本的了解与学习。
关于相关知识要点其实还是蛮多的,现在时间有点紧张,就不一一总结了,下面仅记录一下一些重要点和遇到的一些坑:
- ListAdapter中提供了对列表数据的api
//获取position出的item
protected T getItem(int position) {
return mHelper.getCurrentList().get(position);
}
//获取item数量
@Override
public int getItemCount() {
return mHelper.getCurrentList().size();
}
- 更新数据
注意这里传入的数据要是一个新的list,因为在adapter.helper.submitList方法中会对新老数据做一个等于的判断,如果一样的话就直接return不做更新操作。
adapter.submitList(students);
- DiffUtil
public StudentAdapter(Context context) {
super(new DiffUtil.ItemCallback<Student>() {
@Override
public boolean areItemsTheSame(@NonNull Student oldItem, @NonNull Student newItem) {
//用来判断 两个对象是否是相同的Item。
Log.d("testt", "areItemsTheSame: " + oldItem.id + ", " + newItem.id);
return oldItem.id == newItem.id;
}
@Override
public boolean areContentsTheSame(@NonNull Student oldItem, @NonNull Student newItem) {
//用来检查 两个item是否含有相同的数据
//仅在areItemsTheSame()返回true时,才调用。
Log.d("testt", "areContentsTheSame: " + oldItem.name + ", " + newItem.name);
return oldItem.name.equals(newItem.name)
&& oldItem.sex.equals(newItem.sex);
}
});
//do other init
}