MVVM 封装adapter

2020-08-27  本文已影响0人  e56e2551219d
//封装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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读