package com.pan.simplepicture.adapter; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import com.pan.simplepicture.utils.ContextUtils; import com.pan.simplepicture.view.holder.BaseHolder; import java.lang.reflect.Constructor; import java.util.HashMap; import java.util.List; public class BaseRecyclerAdapter<T> extends RecyclerView.Adapter<BaseHolder<T>> { private List<T> mDatas; private int mResLayout; private Class<? extends BaseHolder<T>> mClazz; public void setmDatas(List<T> mDatas) { this.mDatas = mDatas; notifyDataSetChanged(); } public void addAll(List<T> mDatas) { this.mDatas.addAll(mDatas); notifyItemRangeInserted(this.mDatas.size() - mDatas.size(), this.mDatas.size()); } public void add(T data) { this.mDatas.add(data); notifyItemInserted(this.mDatas.size() - 1); } public void add(int index, T data) { this.mDatas.add(index, data); notifyItemInserted(index); } public T getItem(int position) { try { return this.mDatas.get(position); } catch (Exception e) { e.printStackTrace(); } return null; } public BaseRecyclerAdapter(List<T> mDatas, int mResLayout, Class<? extends BaseHolder<T>> mClazz) { if (mClazz == null) { throw new RuntimeException("clazz is null,please check your params !"); } if (mResLayout == 0) { throw new RuntimeException("res is null,please check your params !"); } this.mDatas = mDatas; this.mResLayout = mResLayout; this.mClazz = mClazz; } public HashMap<Integer, Object> tags = new HashMap<>(); public BaseRecyclerAdapter setTag(int tag, Object mObject) { if (mObject != null) { tags.put(tag, mObject); } return this; } @Override public BaseHolder<T> onCreateViewHolder(ViewGroup parent, int viewType) { View view = ContextUtils.inflate(parent.getContext(), mResLayout); if (tags != null && tags.size() > 0) { for (int tag : tags.keySet()) { view.setTag(tag, tags.get(tag)); } } try { Constructor<? extends BaseHolder<T>> mClazzConstructor = mClazz.getConstructor(View.class); if (mClazzConstructor != null) { return mClazzConstructor.newInstance(view); } } catch (Exception e) { e.printStackTrace(); } return null; } @Override public void onBindViewHolder(final BaseHolder<T> holder, int position) { holder.setData(mDatas.get(position)); } @Override public int getItemCount() { return mDatas.size(); } }