1、数据使用泛型
2、绑定数据使用抽象方法
3、ViewHolder中的View成员变量转而通过view数组实现(SparseArray<View>)
4、将常用方法写在基类中
代码实现:
adapter基类:
public abstract class BaseAdapter<T,H extends BaseViewHolder> extends RecyclerView.Adapter<BaseViewHolder> { protected List<T> datas; protected LayoutInflater mInflater; protected Context mContext; protected final int mlayoutId; protected OnItemClickListener mlistener; public BaseAdapter(Context context, List<T> datas,int layoutId){ this.datas = datas; this.mContext = context; this.mlayoutId = layoutId; mInflater = LayoutInflater.from(context); } public interface OnItemClickListener{ void OnItemClick(View view, int position); } public void setOnItemClickListener(OnItemClickListener listener){ this.mlistener = listener; } @Override public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = mInflater.inflate(mlayoutId,null,false); BaseViewHolder mholder = new BaseViewHolder(view,mlistener); return mholder; } @Override public void onBindViewHolder(BaseViewHolder holder, int position) { T t = getItem(position); bindDatas(holder,t); } public T getItem(int position) { return datas.get(position); } //绑定数据使用抽象方法 public abstract void bindDatas(BaseViewHolder holder,T t); @Override public int getItemCount() { return datas.size(); } }viewHolder类:
public class BaseViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { //ViewHolder中的View成员变量转而通过view数组来实现 private SparseArray<View> views; protected BaseAdapter.OnItemClickListener mlistener; public BaseViewHolder(View itemView, BaseAdapter.OnItemClickListener listener) { super(itemView); views = new SparseArray<>(); this.mlistener = listener; itemView.setOnClickListener(this); } private View findView(int id){ View view = views.get(id); if(view==null){ view = itemView.findViewById(id); views.put(id,view); } return view; } public <T extends View>T getView(int id){ return (T)findView(id); } public TextView getTextView(int id){ return getView(id); } public Button getButton(int id){ return getView(id); } public ImageView getImageView(int id){ return getView(id); } public ImageButton getImageButton(int id){ return getView(id); } @Override public void onClick(View view) { if(mlistener!=null){ mlistener.OnItemClick(view,getLayoutPosition()); } } }另外封装的simpleAdapter类
public abstract class SimpleAdapter<T> extends BaseAdapter<T,BaseViewHolder> { public SimpleAdapter(Context context, List<T> datas, int layoutId) { super(context, datas, layoutId); } }