[Android] RecyclerAdapter 的简单封装

在 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 里面,不过耦合性不是太好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容