package com.cheikh.lazywaimai.base; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import java.util.ArrayList; import java.util.List; import com.cheikh.lazywaimai.util.ViewEventListener; /** * author: cheikh.wang on 16/11/23 * email: wanghonghi@126.com */ public abstract class BaseAdapter<T> extends RecyclerView.Adapter implements IAdapter<T> { private List<T> mItems; private ViewEventListener<T> mViewEventListener; public BaseAdapter() { mItems = new ArrayList<>(); } @Override public void setItems(List<T> items) { mItems.clear(); mItems.addAll(items); notifyDataSetChanged(); } @Override public void addItems(List<T> items) { mItems.addAll(items); notifyDataSetChanged(); } @Override public void addItem(T item) { mItems.add(item); notifyDataSetChanged(); } @Override public void delItem(T item) { mItems.remove(item); notifyDataSetChanged(); } @Override public void clearItems() { mItems.clear(); notifyDataSetChanged(); } @Override public T getItem(int position) { return mItems.get(position); } @Override public void setViewEventListener(ViewEventListener<T> viewEventListener) { mViewEventListener = viewEventListener; } @Override public ViewEventListener<T> getViewEventListener() { return mViewEventListener; } @Override public long getItemId(int position) { return position; } @Override public int getItemCount() { return mItems != null ? mItems.size() : 0; } @Override public final RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(getViewLayoutId(viewType), parent, false); return createViewHolder(view, viewType); } @Override public final void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { if (viewHolder instanceof IViewHolder) { IViewHolder<T> holder = (IViewHolder) viewHolder; holder.setViewEventListener(mViewEventListener); holder.setItem(getItem(position)); holder.setPosition(position); } bindViewHolder(viewHolder, getItem(position), position); } public abstract int getViewLayoutId(int viewType); public abstract RecyclerView.ViewHolder createViewHolder(View view, int viewType); public abstract void bindViewHolder(RecyclerView.ViewHolder holder, T item, int position); }