//封装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;
}
}