RecyclerView通用适配器Adapter,对Adapter的封装

来源:互联网 发布:coc国王升级数据 编辑:程序博客网 时间:2024/05/01 10:22

一、通用ViewHolder

RecyclerView要求必须使用ViewHolder模式,一般我们在使用过程中,都需要去建立一个新的ViewHolder然后作为泛型传入Adapter。那么想要建立通用的Adapter,必须有个通用的ViewHolder。

首先我们确定下ViewHolder的主要的作用,实际上是通过成员变量存储对应的convertView中需要操作的字View,避免每次findViewById,从而提升运行的效率。

public class ViewHolder extends RecyclerView.ViewHolder{    private SparseArray<View> mViews;    private View mConvertView;    private Context mContext;    public ViewHolder(Context context, View itemView, ViewGroup parent)    {        super(itemView);        mContext = context;        mConvertView = itemView;        mViews = new SparseArray<View>();    }    public static ViewHolder get(Context context, ViewGroup parent, int layoutId)    {        View itemView = LayoutInflater.from(context).inflate(layoutId, parent,                false);        ViewHolder holder = new ViewHolder(context, itemView, parent, position);        return holder;    }    /**     * 通过viewId获取控件     *     * @param viewId     * @return     */    public <T extends View> T getView(int viewId)    {        View view = mViews.get(viewId);        if (view == null)        {            view = mConvertView.findViewById(viewId);            mViews.put(viewId, view);        }        return (T) view;    } public ViewHolder setText(int viewId, String text)    {        TextView tv = getView(viewId);        tv.setText(text);        return this;    }   public ViewHolder setImageResource(int viewId, int resId)    {        ImageView view = getView(viewId);        view.setImageResource(resId);        eturn this;    }    public ViewHolder setOnClickListener(int viewId,                                         View.OnClickListener listener)    {        View view = getView(viewId);        view.setOnClickListener(listener);        return this;    }


 }

二、通用的Adapter

public abstract class CommonAdapter<T> extends RecyclerView.Adapter<ViewHolder>{    protected Context mContext;    protected int mLayoutId;    protected List<T> mDatas;    protected LayoutInflater mInflater;    public CommonAdapter(Context context, int layoutId, List<T> datas)    {        mContext = context;        mInflater = LayoutInflater.from(context);        mLayoutId = layoutId;        mDatas = datas;    }    @Override    public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType)    {        ViewHolder viewHolder = ViewHolder.get(mContext, parent, mLayoutId);        return viewHolder;    }    @Override    public void onBindViewHolder(ViewHolder holder, int position)    {               convert(holder, mDatas.get(position));    }    public abstract void convert(ViewHolder holder, T t);    @Override    public int getItemCount()    {        return mDatas.size();    }}

三、使用

mRecyclerView.setAdapter(new CommonAdapter<String>(this, R.layout.item_list, mDatas){    @Override    public void convert(ViewHolder holder, String s)    {                holder.setText(R.id.id_item_list_title,s);    }});


Android学习交流①群 152643026



2 0
原创粉丝点击