/* * Copyright (c) 2015 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com> * All Rights Reserved. */ package me.zhanghai.android.douya.ui; import android.support.v7.widget.RecyclerView; import java.util.ArrayList; import java.util.Collection; import java.util.List; public abstract class SimpleAdapter<T, VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> { private List<T> mList = new ArrayList<>(); public SimpleAdapter() { this(null); } public SimpleAdapter(List<T> list) { if (list != null) { mList.addAll(list); } } public List<T> getList() { return mList; } public void addAll(Collection<? extends T> collection) { int oldSize = mList.size(); mList.addAll(collection); notifyItemRangeInserted(oldSize, collection.size()); } public void replace(Collection<? extends T> collection) { mList.clear(); mList.addAll(collection); notifyDataSetChanged(); } public void add(T item) { mList.add(item); notifyItemInserted(mList.size() - 1); } public void set(int position, T item) { mList.set(position, item); notifyItemChanged(position); } public T remove(int position) { T item = mList.remove(position); notifyItemRemoved(position); return item; } public void clear() { int oldSize = mList.size(); mList.clear(); notifyItemRangeRemoved(0, oldSize); } public int findPositionById(long id) { int count = getItemCount(); for (int i = 0; i < count; ++i) { if (getItemId(i) == id) { return i; } } return RecyclerView.NO_POSITION; } public void notifyItemChangedById(long id) { int position = findPositionById(id); if (position != RecyclerView.NO_POSITION) { notifyItemChanged(position); } } public T removeById(long id) { int position = findPositionById(id); if (position != RecyclerView.NO_POSITION) { return remove(position); } else { return null; } } public T getItem(int position) { return mList.get(position); } @Override public int getItemCount() { return mList.size(); } }