美文网首页
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