BaseViewHolder.java
/**
 * 类说明:复用ViewHolder, 绑定 RecyclerView item 的控件
 * Author: gaobaiq
 * Date: 2016/3/29 16:02
 */
public class BaseViewHolder {

    private SparseArray<View> mViews;
    private View view;

    public static BaseViewHolder getViewHolder(View view) {
        BaseViewHolder baseViewHolder = (BaseViewHolder) view.getTag();
        if (baseViewHolder == null) {
            baseViewHolder = new BaseViewHolder(view);
            view.setTag(baseViewHolder);
        }
        return baseViewHolder;
    }

    private BaseViewHolder(View view) {
        this.view = view;
        mViews = new SparseArray<>();
        view.setTag(mViews);
    }

    public <T extends View> T get(int viewId) {
        View view = mViews.get(viewId);
        if (view == null) {
            view = this.view.findViewById(viewId);
            mViews.put(viewId, view);
        }
        return (T) view;
    }

    public View getConvertView() {
        return view;
    }

    /**
     * 关于值的设置
     */
    public BaseViewHolder setText(int viewId, String text) {
        TextView tv = get(viewId);
        tv.setText(text);
        return this;
    }

    public BaseViewHolder setImageResource(int viewId, int resId) {
        ImageView view = get(viewId);
        view.setImageResource(resId);
        return this;
    }

    public BaseViewHolder setImageBitmap(int viewId, Bitmap bitmap) {
        ImageView view = get(viewId);
        view.setImageBitmap(bitmap);
        return this;
    }


    public BaseViewHolder setImageDrawable(int viewId, Drawable drawable) {
        ImageView view = get(viewId);
        view.setImageDrawable(drawable);
        return this;
    }


    public BaseViewHolder setBackgroundColor(int viewId, int color) {
        View view = get(viewId);
        view.setBackgroundColor(color);
        return this;
    }

    public BaseViewHolder setBackgroundRes(int viewId, int backgroundRes) {
        View view = get(viewId);
        view.setBackgroundResource(backgroundRes);
        return this;
    }


    public BaseViewHolder setTextColor(int viewId, int textColor) {
        TextView view = get(viewId);
        view.setTextColor(textColor);
        return this;
    }


    @SuppressLint("NewApi")
    public BaseViewHolder setAlpha(int viewId, float value) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            get(viewId).setAlpha(value);
        } else {
            // Pre-honeycomb hack to set Alpha value
            AlphaAnimation alpha = new AlphaAnimation(value, value);
            alpha.setDuration(0);
            alpha.setFillAfter(true);
            get(viewId).startAnimation(alpha);
        }
        return this;
    }

    public BaseViewHolder setVisible(int viewId, boolean visible) {
        View view = get(viewId);
        view.setVisibility(visible ? View.VISIBLE : View.GONE);
        return this;
    }

    public BaseViewHolder setVisible(int viewId, int visible) {
        View view = get(viewId);
        view.setVisibility(visible);
        return this;
    }

    public BaseViewHolder linkify(int viewId) {
        TextView view = get(viewId);
        Linkify.addLinks(view, Linkify.ALL);
        return this;
    }

    public BaseViewHolder setTypeface(Typeface typeface, int... viewIds) {
        for (int viewId : viewIds) {
            TextView view = get(viewId);
            view.setTypeface(typeface);
            view.setPaintFlags(view.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG);
        }
        return this;
    }

    public BaseViewHolder setProgress(int viewId, int progress) {
        ProgressBar view = get(viewId);
        view.setProgress(progress);
        return this;
    }

    public BaseViewHolder setProgress(int viewId, int progress, int max) {
        ProgressBar view = get(viewId);
        view.setMax(max);
        view.setProgress(progress);
        return this;
    }

    public BaseViewHolder setMax(int viewId, int max) {
        ProgressBar view = get(viewId);
        view.setMax(max);
        return this;
    }

    public BaseViewHolder setRating(int viewId, float rating) {
        RatingBar view = get(viewId);
        view.setRating(rating);
        return this;
    }

    public BaseViewHolder setRating(int viewId, float rating, int max) {
        RatingBar view = get(viewId);
        view.setMax(max);
        view.setRating(rating);
        return this;
    }

    public BaseViewHolder setTag(int viewId, Object tag) {
        View view = get(viewId);
        view.setTag(tag);
        return this;
    }

    public BaseViewHolder setTag(int viewId, int key, Object tag) {
        View view = get(viewId);
        view.setTag(key, tag);
        return this;
    }

    public BaseViewHolder setChecked(int viewId, boolean checked) {
        Checkable view = get(viewId);
        view.setChecked(checked);
        return this;
    }
    
}
RecyclerViewHolder.java
/**
 * 类说明:
 * Author: gaobaiq
 * Date: 2016/3/29 16:20
 */
public class RecyclerViewHolder extends RecyclerView.ViewHolder {

    private BaseViewHolder baseViewHolder;

    public RecyclerViewHolder(View itemView) {
        super(itemView);
        baseViewHolder = BaseViewHolder.getViewHolder(itemView);
    }

    public BaseViewHolder getViewHolder() {
        return baseViewHolder;
    }
}
CommonRecyclerAdapter.java
/**
 * 类说明:RecyclerView 适配器基类
 * Author: gaobaiq
 * Date: 2016/3/29 15:58
 */
public abstract class CommonRecyclerAdapter<T> extends RecyclerView.Adapter<RecyclerViewHolder> {

    protected Context mContext;
    protected List<T> mList;

    protected ViewHolderClick<T> holderClick;
    protected AdapterView.OnItemClickListener onItemClickListener;
    protected AdapterView.OnItemLongClickListener onItemLongClickListener;

    public CommonRecyclerAdapter(Context context) {
        this.mContext = context;
        this.mList = new ArrayList<>();
    }

    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(onCreateViewLayoutID(viewType), parent, false);
        return new RecyclerViewHolder(view);
    }

    @Override
    public void onViewRecycled(final RecyclerViewHolder holder) {
        super.onViewRecycled(holder);
    }

    @Override
    public void onBindViewHolder(final RecyclerViewHolder holder, final int position) {
        onBindViewHolder(holder.getViewHolder(), position);
        if (onItemClickListener != null) {
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onItemClickListener.onItemClick(null, v, holder.getAdapterPosition(), holder.getItemId());
                }
            });
        }

        if (onItemLongClickListener != null) {
            holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    onItemLongClickListener.onItemLongClick(null, v, holder.getAdapterPosition(), holder.getItemId());
                    return false;
                }
            });
        }
    }

    public abstract int onCreateViewLayoutID(int viewType);

    public abstract void onBindViewHolder(BaseViewHolder holder, int position);

    @Override
    public int getItemCount() {
        return mList == null ? 0 : mList.size();
    }

    /**
     * 获取列表
     */
    public List<T> getList() {
        return mList;
    }

    /**
     * 替换某一个元素
     */
    public void replaceBean(int position, T t) {
        if (t != null) {
            this.mList.remove(position);
            this.mList.add(position, t);
            notifyItemChanged(position, t);
        }
    }

    /**
     * 添加数据列表到列表头部
     */
    public void addListAtStart(List<T> list) {
        if (list != null && !list.isEmpty()) {
            this.mList.addAll(0, list);
            notifyDataSetChanged();
        }
    }

    /**
     * 添加数据列表到列表尾部
     */
    public void addListAtEnd(List<T> list) {
        if (list != null && !list.isEmpty()) {
            this.mList.addAll(list);
            notifyItemRangeInserted(mList.size() - 1, list.size());
        }

    }


    /**
     * 添加数据列表到列表尾部
     */
    public void addListAtEndAndNotify(List<T> list) {
        if (list != null && !list.isEmpty()) {
            this.mList.addAll(list);
            notifyDataSetChanged();
        }
    }


    /**
     * 添加单个元素到列表头
     */
    public void addListBeanAtStart(T t) {
        if (t != null) {
            mList.add(0, t);
            notifyItemInserted(0);
        }

    }

    /**
     * 添加单个元素到列表尾
     */
    public void addListBeanAtEnd(T t) {
        if (t != null) {
            mList.add(t);
            notifyItemInserted(mList.size() - 1);
        }

    }

    /**
     * 替换RecyclerView数据
     */
    public void replaceList(List<T> list) {
        if (list != null){
            this.mList = list;
        } else {
            mList.clear();
        }

        notifyDataSetChanged();
    }

    /**
     * 替换RecyclerView中的某一个数据
     */
    public void replaceItem(T t, int position) {
        if (position >= 0 && position <= mList.size() && t != null) {
            this.mList.set(position, t);
            notifyItemChanged(position);
        }
    }

    /**
     * 删除RecyclerView所有数据
     */
    public void removeAll() {
        if (mList != null) {
            notifyItemRangeRemoved(0, mList.size());
            this.mList.clear();
        }
    }

    /**
     * 删除RecyclerView指定位置的数据
     */
    public void remove(T t) {
        if(mList != null) {
            this.mList.remove(t);
            notifyDataSetChanged();
        }
    }

    /**
     * 删除RecyclerView指定位置的数据
     */
    public void remove(int position) {
        if (position >= 0 && position <= mList.size() && mList != null) {
            this.mList.remove(position);
            notifyItemRemoved(position);
        }
    }

    /**
     * item点击事件抽象方法
     */
    public AdapterView.OnItemClickListener getOnItemClickListener() {
        return onItemClickListener;
    }

    public void setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    /**
     * item长按事件抽象方法
     */
    public AdapterView.OnItemLongClickListener getOnItemLongClickListener() {
        return onItemLongClickListener;
    }

    public void setOnItemLongClickListener(AdapterView.OnItemLongClickListener onItemLongClickListener) {
        this.onItemLongClickListener = onItemLongClickListener;
    }

    /**
     * 点击事件抽象方法
     */
    public void setOnHolderClick(ViewHolderClick<T> holderClick) {
        this.holderClick = holderClick;
    }

    public interface ViewHolderClick<T> {
        void onViewClick(View view, T t, int position);
    }
}

调用方法:

注意:DeviceBean是一个对象,你可以传任何对象或者String,int,long等,调用的时候只需要mAdapter.replaceList(List<DeviceBean>);即可。

/**
 * 类说明:我的设备
 * Author: gaobaiq
 * Date: 2016/8/12 10:27
 */
public class MyDeviceAdapter extends CommonRecyclerAdapter<DeviceBean> {

    public MyDeviceAdapter(Context context) {
        super(context);
    }


    @Override public int onCreateViewLayoutID(int viewType) {
        return R.layout.item_of_my_device;
    }


    @Override
    public void onBindViewHolder(BaseViewHolder holder, int position) {
        DeviceBean bean = mList.get(position);
        //TextView tvTitle = holder.get(R.id.tv_title);
        //tvTitle.setText(bean.getTitle());
        
        holder.setText(R.id.tv_title, bean.getTitle());
    }
}