Android RecyclerView Adapter 新式用法之SortedListAdapterCallback


引言

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM