美文网首页
[Android] RecyclerAdapter 的简单封装

[Android] RecyclerAdapter 的简单封装

作者: 希灵丶 | 来源:发表于2016-05-09 18:07 被阅读740次

    在 5.0 后 google 推出了用于替代 ListView 的新控件 --- RecyclerView。

    至于这么用,在这就不多说了,资料很多。 这里我们主要来看看关于 RecyclerAdapter 的封装 。

    RecyclerView 确实很好用,灵活自由,但是也因此代码量相对 ListView 会比较多。并且没有现成的 Adapter 使用 ,就算是显示简单的文本列表,也需要重写。那么为了方便使用。我们可以对 RecyclerAdapter 进行简单的封装。在此基础上,可以根据个人项目需求进行更多复杂的封装。

    来看代码吧

    public abstract class BaseRecyclerAdapter<T, VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {
        protected List<T> mDatas = new ArrayList<>();
        protected Context mContext;
        protected LayoutInflater inflater;
        AdapterView.OnItemClickListener mItemClickListener;
    
        public BaseRecyclerAdapter(List<T> mDatas, Context mContext) {
            this.mDatas = mDatas;
            this.mContext = mContext;
            inflater = LayoutInflater.from(mContext);
        }
    
        @Override
        public void onBindViewHolder(VH holder, int position) {
            T item = getItem(position);
            bindItemData(holder, item, position);
            setupOnItemClick(holder, position);
        }
    
        protected abstract void bindItemData(VH viewHolder, T data, int position);
    
        protected void setupOnItemClick(final VH viewHolder, final int position) {
            if (mItemClickListener != null) {
                viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mItemClickListener.onItemClick(null, viewHolder.itemView, position, position);
                    }
                });
            }
        }
    
        @Override
        public int getItemCount() {
            return mDatas.size();
        }
    
        public T getItem(int position) {
            position = Math.max(0, position);
            return mDatas.get(position);
        }
    
        public List<T> getDataSource() {
            return mDatas;
        }
    
        public void addData(List<T> newItems) {
            if (newItems != null) {
                mDatas.addAll(newItems);
                notifyDataSetChanged();
            }
        }
        public void deleteItem(int position) {
            mDatas.remove(position);
            notifyItemRemoved(position);
            notifyDataSetChanged();
        }
    
        public void updateListViewData(List<T> lists) {
            mDatas.clear();
            if (lists != null) {
                mDatas.addAll(lists);
                notifyDataSetChanged();
            }
        }
    
        public void setOnItemClickListener(AdapterView.OnItemClickListener listener) {
            this.mItemClickListener = listener;
        }
    }
    

    上面的代码中对数据的获取,添加,删除,替换等操作进行了封装。还有点击事件,默认的 RecyclerAdapter 是不管点击事件的,需要我们自己去做接口。当然了,也可以直接写在 Adapter 里面,不过耦合性不是太好。

    相关文章

      网友评论

          本文标题:[Android] RecyclerAdapter 的简单封装

          本文链接:https://www.haomeiwen.com/subject/tyesrttx.html