引言
前几天在同事的提醒下发现V7中有了一个新的工具类SortedListAdapterCallback,配合RecyclerView Adapter和SortedList一起使用更加方便的管理我们在Adapter中的数据,省去我们很多“多余“的工作。
使用方法
- 申明一个SortedList类型的数据聚合
SortedList<Object> mDataList;
- 实现SortedListAdapterCallback抽象类
static class ObjectListCallback extends SortedListAdapterCallback<Object>{
public ObjectListCallback(RecyclerView.Adapter adapter) {
super(adapter);
}
@Override
public int compare(Object o1, Object o2) {
//TODO:
return 0;
}
@Override
public boolean areContentsTheSame(Object oldItem, Object newItem) {
//TODO:
return false;
}
@Override
public boolean areItemsTheSame(Object item1, Object item2) {
//TODO:
return 0;
}
}
其中compare()函数是判断SortedList中数据的现实顺序的。而areContentsTheSame()和areItemsTheSame()这两个抽象方法初看好像差不多(.),但其实区别还是很大的,areContentsTheSame()是取代了equals方法,用于判断SortedList中Item是否改变,如果改变则调用onChanged()函数。 而areItemsTheSame()则是用于判断SortedList中两个Item是否代表相通对象,其实就是数据的去重。
- 创建一个RecyclerView Adapter,并进行SortedList的初始化。
mDataList = new SortedList<>(Object.class, new ObjectListCallback(mAdapter));
- 当数据有发生改变时,例如删除,增加等,你只需直接对mDataList进行相应操作,再无需关心mAdapter内数据显示更新问题,例如notifyDataChanged等通知函数的调用,因为SortedListAdapterCallback内的回调函数会自动帮你完成。
mDataList.beginBatchedUpdates();
mDataList.addAll(object);
mDataList.endBatchedUpdates();
这样就简单地完成了数据的加载,RecyclerView会自动刷新UI。
局限性
SortedListAdapterCallback目前仅支持与RecyclerView Adapter搭配使用,并不支持ListView。
结语
第一次见到SortedListAdapterCallback这个工具类时,第一感觉就是眼前一亮,因为它和我们一般认知的Adapter与DataLis间的依赖关系完全相反,它是将Adapter直接“塞入“到DataList中并把细节都进行了封装,这样我们就是只要关心DataList中的数据更新问题,而无需关心RecyclerView的各种刷新,哈哈,真的是非常方便,非常建议大家使用。
作者:XycZero
查看原文:http://www.xyczero.com/blog/article/27/.