RecyclerView.Adapter的基本封装

这里写图片描述

Baseadapter

public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseViewHolder> {

    protected Context mContext;
    protected List<T> mList;
    protected int layoutId;


    public interface OnItemClickListener {
        void onItemClick(View view, int position);
    }

    public interface OnItemLongClickListener {
        void onItemLongClick(View view, int position);
    }

    protected OnItemClickListener mOnItemClickListener = null;

    protected OnItemLongClickListener mOnItemLongClickListener = null;


    public BaseAdapter(Context context, List<T> list) {
        mContext = context;
        mList = list;
    }

    public BaseAdapter(Context context, List<T> list, int layoutId) {
        mContext = context;
        mList = list;
        this.layoutId = layoutId;
    }

    @Override
    public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

//        View view = LayoutInflater.from(mContext).inflate(layoutId, null, false);
        View view = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
        BaseViewHolder vh = new BaseViewHolder(view);
        vh.setOnItemClickListener(mOnItemClickListener);
        vh.setOnItemLongClickListener(mOnItemLongClickListener);
        return vh;
    }

    @Override
    public void onBindViewHolder(BaseViewHolder holder, int position) {
        bindViewHolder(holder, getItem(position), position);
    }


    @Override
    public int getItemCount() {
        return mList.size();
    }


    /**
     * Implement this method and use the helper to adapt the view to the given item.
     *
     * @param viewHoder A fully initialized helper.
     * @param item      The item that needs to be displayed.
     * @param position
     */
    protected abstract void bindViewHolder(BaseViewHolder viewHoder, T item, int position);

    public void setOnItemClickListener(OnItemClickListener listener) {
        this.mOnItemClickListener = listener;
    }

    public void setOnItemLongClickListener(OnItemLongClickListener listener) {
        this.mOnItemLongClickListener = listener;
    }

    /**
     * 封装的一些Adapter中的常用方法
     */

    /**
     * 根据position获取Item
     *
     * @param position
     * @return
     */
    public T getItem(int position) {
        if (position >= mList.size())
            return null;
        return mList.get(position);
    }

    /**
     * 清空列表数据
     */
    public void clear() {

        if (mList == null || mList.size() <= 0)
            return;

        for (Iterator iterator = mList.iterator(); iterator.hasNext(); ) {

            T t = (T) iterator.next();
            int position = mList.indexOf(t);
            iterator.remove();
            notifyItemRemoved(position);
        }

    }

    /**
     * 从列表中删除某项
     *
     * @param t
     */
    public void removeItem(T t) {
        int position = mList.indexOf(t);
        mList.remove(position);
        notifyItemRemoved(position);
    }

    /**
     * 获取整个列表的数据
     *
     * @return List
     */
    public List<T> getList() {
        return mList;
    }


    /**
     * 向列表中添加数据
     *
     * @param datas
     */
    public void addData(List<T> datas) {
        addData(0, datas);
    }

    /**
     * 向列表中的具体位置添加数据
     *
     * @param position
     * @param list
     */
    public void addData(int position, List<T> list) {

        if (list != null && list.size() > 0) {

            for (T t : list) {
                mList.add(position, t);
                notifyItemInserted(position);
            }
        }
    }

    /**
     * 刷新列表
     * 下拉刷新
     * @param list
     */

    public void refreshData(List<T> list) {
        clear();
        if (list != null && list.size() > 0) {
            int size = list.size();
            for (int i = 0; i < size; i++) {
                mList.add(i, list.get(i));
                notifyItemInserted(i);
            }
        }
    }

    /**
     * 加载更多
     * 上拉加载
     * @param list
     */
    public void loadMoreData(List<T> list) {

        if (list != null && list.size() > 0) {
            int size = list.size();
            int begin = mList.size();
            for (int i = 0; i < size; i++) {
                mList.add(list.get(i));
                notifyItemInserted(i + begin);
            }
        }
    }


}

BaseViewHolder

public class BaseViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,View.OnLongClickListener{

    private SparseArray<View> mViews;

    private BaseAdapter.OnItemClickListener mOnItemClickListener ;
    private BaseAdapter.OnItemLongClickListener mOnItemLongClickListener ;

    public BaseViewHolder(View itemView) {
        super(itemView);
        this.mViews = new SparseArray<>();
        itemView.setOnClickListener(this);
        itemView.setOnLongClickListener(this);

    }

    public void setOnItemClickListener(BaseAdapter.OnItemClickListener listener) {
        this.mOnItemClickListener = listener;
    }

    public void setOnItemLongClickListener(BaseAdapter.OnItemLongClickListener listener) {
        this.mOnItemLongClickListener = listener;
    }

    /**
     * 一些常用控件的获取 TextView
     * @param viewId
     * @return TextView
     */
    public TextView getTextView(int viewId) {
        return bindView(viewId);
    }

    /**
     * 一些常用控件的获取 ImageView
     * @param viewId
     * @return ImageView
     */
    public ImageView getImageView(int viewId) {
        return bindView(viewId);
    }

    /**
     * 一些常用控件的获取 Button
     * @param viewId
     * @return Button
     */
    public Button getButton(int viewId) {
        return bindView(viewId);
    }

    /**
     * 一些常用控件的获取 CheckBox
     * @param viewId
     * @return CheckBox
     */
    public CheckBox getCheckBox(int viewId) {
        return bindView(viewId);
    }

    /**
     * 一些常用控件的获取 View
     * @param viewId
     * @return View
     */
    public View getView(int viewId) {
        return bindView(viewId);
    }

    /**
     * 尝试绑定View的Id,成功将其缓存到SparseArray中
     * @param viewId
     * @param <T>
     * @return T extends View
     */

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

    @Override
    public void onClick(View v) {
        if (mOnItemClickListener != null) {
            mOnItemClickListener.onItemClick(v,getLayoutPosition());
        }
    }

    @Override
    public boolean onLongClick(View v) {
        if (mOnItemLongClickListener != null) {
            mOnItemLongClickListener.onItemLongClick(v,getLayoutPosition());
        }
        return true;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值