adapter的封装

来源:互联网 发布:天一古琴淘宝店 编辑:程序博客网 时间:2024/06/06 23:02

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);    }}

0 0