RecyclerView通用ViewHolder

前言

ViewHolder参照BaseRecyclerViewAdapterHelper组件

该代码仅做个人学习和开发使用

优势

弱引用

对于传入的Context持有弱引用,不会造成内存泄漏

结构清晰

除根视图外的所有视图不需提前初始化,用到时初始化即可,同时加入到ViewList中

使用便捷

绑定内容可以全部使用链式调用,没有多余代码.仅仅传入控件id和需要填充的内容即可.

扩展性

View使用泛型,可以随意添加任何类型的View,自行扩展,不影响主要功能

主要代码

public class EasyViewHolder {
    //view数组
    private final SparseArray<View> views;
    private WeakReference<Context> mContext;
    //根视图
    public View convertView;
    public EasyViewHolder(Context context) {
        mContext= new WeakReference<>(context);
        this.views = new SparseArray<>();
    }

    public <T extends View> T getView(@IdRes int viewId) {
        View view = views.get(viewId);
        if (view == null) {
            view = convertView.findViewById(viewId);
            views.put(viewId, view);
        }
        return (T) view;
    }

    /**
     * @param layoutId
     * @return
     * 设置根视图
     */
    public EasyViewHolder setConvertView(@LayoutRes int layoutId) {
        if (mContext.get()!=null) {
            LayoutInflater inflater = LayoutInflater.from(mContext.get());
            convertView = inflater.inflate(layoutId, null);
        }
        return this;
    }

    /**
     * @param viewId
     * @param value
     * @return
     * 设置textview的内容
     */
    public EasyViewHolder setText(@IdRes int viewId, CharSequence value) {
        TextView view = getView(viewId);
        view.setText(value);
        return this;
    }

    /**
     * @param viewId        视图id
     * @param imageResId    资源id
     * @return
     * 设置本地图片
     */
    public EasyViewHolder setImageResource(@IdRes int viewId,  int imageResId) {
        ImageView view = getView(viewId);
        view.setImageResource(imageResId);
        return this;
    }

}

使用方法

EasyViewHolder viewholder = new EasyViewHolder(context);
viewholder.setConvertView(layoutId).setText(textviewId,"text")
  .setImageResource(imageviewId,imgageResId);
Last modification:November 9th, 2018 at 05:36 pm
如果觉得我的文章对你有用,请我喝杯咖啡

Leave a Comment