引言
前幾天在同事的提醒下發現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/.