package io.github.droidkaigi.confsched.widget; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.UiThread; import android.support.v7.widget.RecyclerView; import android.view.View; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public abstract class ArrayRecyclerAdapter<T, VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> implements Iterable<T> { final Context context; final ArrayList<T> list; OnItemClickListener<T> onItemClickListener; OnItemLongClickListener<T> onItemLongClickListener; public ArrayRecyclerAdapter(@NonNull Context context) { this.context = context; this.list = new ArrayList<>(); } @Override public int getItemCount() { return list.size(); } @UiThread public void reset(Collection<T> items) { clear(); addAll(items); notifyDataSetChanged(); } public T getItem(int position) { return list.get(position); } public void addItem(T item) { list.add(item); } public void addAll(Collection<T> items) { list.addAll(items); } public void addAll(int position, Collection<T> items) { list.addAll(position, items); } @UiThread public void addAllWithNotification(Collection<T> items) { int position = getItemCount(); addAll(items); notifyItemInserted(position); } public void clear() { list.clear(); } public Context getContext() { return context; } public void setOnItemClickListener(OnItemClickListener<T> listener) { onItemClickListener = listener; } public void setOnItemLongClickListener(OnItemLongClickListener<T> listener) { onItemLongClickListener = listener; } public void dispatchOnItemClick(View view, T item) { assert onItemClickListener != null; onItemClickListener.onItemClick(view, item); } public boolean dispatchOnItemLongClick(View view, T item) { assert onItemLongClickListener != null; return onItemLongClickListener.onItemLongClick(view, item); } @Override public Iterator<T> iterator() { return list.iterator(); } }