DiffUtil封裝

//RecyclerView配合DiffUtil使用非常方便,但是DiffUtil.Callback需要重新很多無用代碼,今天就封裝下這個類,讓使用者,使用更加happy。

//核心代碼

public abstract class BaseDiffUtilCallback<T> extends DiffUtil.Callback {

    protected List<T> oldList;
    protected List<T> newList;

    public BaseDiffUtilCallback(List<T> oldList, List<T> newList) {
        this.oldList = oldList;
        this.newList = newList;
    }

    @Override
    public int getOldListSize() {
        if (oldList != null) {
            return oldList.size();
        }

        return 0;
    }

    @Override
    public int getNewListSize() {
        if (newList != null) {
            return newList.size();
        }
        return 0;
    }

    @Override
    public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {

        return setAreItemsTheSame(oldItemPosition,newItemPosition);
    }

    /**
     * 判斷item佈局是否相同
     * 子類實現
     * @param oldItemPosition
     * @param newItemPosition
     * @return
     */
    public abstract boolean setAreItemsTheSame(int oldItemPosition, int newItemPosition);


    @Override
    public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
        return setAreContentsTheSame(oldItemPosition, newItemPosition);
    }

    /**
     * 判斷item內容是否相同
     * 子類實現
     * @param oldItemPosition
     * @param newItemPosition
     * @return
     */
    public abstract boolean setAreContentsTheSame(int oldItemPosition, int newItemPosition);
}

 

//使用

public class RecyclerItemCallback extends BaseDiffUtilCallback<Bean> {


    public RecyclerItemCallback(List<Bean> oldList, List<Bean> newList) {
        super(oldList, newList);
    }

    @Override
    public boolean setAreItemsTheSame(int oldItemPosition, int newItemPosition) {
        return Objects.equals(newList.get(newItemPosition).getId(), oldList.get(oldItemPosition).getId());
    }

    @Override
    public boolean setAreContentsTheSame(int oldItemPosition, int newItemPosition) {
        return Objects.equals(oldList.get(oldItemPosition).getContent(), newList.get(newItemPosition).getContent());
    }


}

 

//封裝後的callback是不是很簡潔了。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章