美文网首页
DataBinding+RecyclerView.Adapter

DataBinding+RecyclerView.Adapter

作者: Frank_Kivi | 来源:发表于2018-09-30 18:19 被阅读27次



public abstract class BaseAdapter<E> extends RecyclerView.Adapter {

    public void setDatas(List<E> datas) {
        this.mDatas.clear();
        if (mDatas != null) {
            this.mDatas.addAll(datas);
        }
        notifyDataSetChanged();
    }

    public void addDatas(List<E> datas) {
        if (datas != null) {
            int size = this.mDatas.size();
            this.mDatas.addAll(datas);
            notifyItemRangeInserted(size, datas.size());
        }
    }

    /**
     * 不要直接赋值,容易被外边的数据影响
     */
    protected List<E> mDatas = new ArrayList<>();

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        ViewDataBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(viewGroup
                .getContext()), getLayoutId(i), viewGroup, false);
        return new RecyclerView.ViewHolder(viewDataBinding.getRoot()) {
        };
    }

    /**
     * 为了兼容多个type,所以要写方法回调,而不是传入一个。
     *
     * @param type
     * @return
     */
    protected abstract int getLayoutId(int type);

    /**
     * 为了兼容多个type,所以写成父类,没有使用泛型。
     *
     * @param type
     * @param itemView
     * @return
     */
    protected void onBindData(ViewDataBinding viewDataBinding, E data, View itemView, int
            position) {
        //把xml中data的variable的名字写一样就可以直接一次性设置数据了。
        viewDataBinding.setVariable(1, data);
    }


    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
        onBindData(DataBindingUtil.getBinding(viewHolder.itemView), getItem(i), viewHolder
                .itemView, i);
    }

    protected E getItem(int position) {
        return mDatas.get(position);
    }

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


网友评论

      本文标题:DataBinding+RecyclerView.Adapter

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