美文网首页
MVVM 封装adapter

MVVM 封装adapter

作者: e56e2551219d | 来源:发表于2020-08-27 14:15 被阅读0次
    //封装BaseAdapter
    public abstract class BaseVmRecyclerAdapter<T,E extends ViewBinding> extends RecyclerView.Adapter<MvvmViewHolder<E>> {
        public List<T> mData;
        private final Context mContext;
        private OnItemClickListener mClickListener;
        private OnItemLongClickListener mLongClickListener;
        public BaseVmRecyclerAdapter(Context ctx, @Nullable List<T> list) {
            mData = list;
            mContext = ctx;
        }
        @Override
        public MvvmViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            E vbuild = getBuild(parent);
            final MvvmViewHolder holder = new MvvmViewHolder(vbuild);
            if (mClickListener != null) {
                holder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mClickListener.onItemClick(holder.itemView, holder.getLayoutPosition());
                    }
                });
            }
            if (mLongClickListener != null) {
                holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        mLongClickListener.onItemLongClick(holder.itemView, holder.getLayoutPosition());
                        return true;
                    }
                });
            }
            return holder;
        }
    
        @Override
        public void onBindViewHolder(MvvmViewHolder<E> holder, int position) {
            bindData(holder.getVbind(), position, mData.get(position));
        }
    
        public T getItem(int pos){
            return mData.get(pos);
        }
    
        @Override
        public int getItemCount() {
            return mData.size();
        }
    
        public void add(int pos, T item) {
            mData.add(pos, item);
            notifyItemInserted(pos);
        }
    
        public void prepend(@NonNull List<T> items){
            mData.addAll(0, items);
            notifyDataSetChanged();
        }
    
        public void append(@NonNull List<T> items){
            mData.addAll(items);
            notifyDataSetChanged();
        }
    
        public void delete(int pos) {
            mData.remove(pos);
            notifyItemRemoved(pos);
        }
    
        public void setOnItemClickListener(OnItemClickListener listener) {
            mClickListener = listener;
        }
    
        public void setOnItemLongClickListener(OnItemLongClickListener listener) {
            mLongClickListener = listener;
        }
    
    
        abstract public void bindData(E vbind, int position, T item);
    
        public interface OnItemClickListener {
            void onItemClick(View itemView, int pos);
        }
    
        public interface OnItemLongClickListener {
            void onItemLongClick(View itemView, int pos);
        }
    
        public Context getmContext() {
            return mContext;
        }
        public void setData(@Nullable List<T> list) {
            mData.clear();
            if(list != null){
                mData.addAll(list);
            }
            notifyDataSetChanged();
        }
    
        public void remove(int pos){
            mData.remove(pos);
            notifyItemRemoved(pos);
        }
        public abstract E getBuild(ViewGroup parent);
    }
    

    这是holder

    public class MvvmViewHolder<E extends ViewBinding> extends RecyclerView.ViewHolder {
        private E vbind;
        public MvvmViewHolder(@NonNull E viewBinding) {
            super(viewBinding.getRoot());
            vbind = viewBinding;
        }
    
        public E getVbind() {
            return vbind;
        }
    }
    

    相关文章

      网友评论

          本文标题:MVVM 封装adapter

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