| | |
| | | /** |
| | | * @author Ljj |
| | | * @date 2023.03.02. 17:09 |
| | | * @desc |
| | | * @desc RecyclerView 适配器基类 |
| | | */ |
| | | public abstract class BaseRVAdapter<T,VDB extends ViewDataBinding> extends RecyclerView.Adapter<BaseRVAdapter.BaseViewHolder<VDB>> { |
| | | public abstract class BaseRVAdapter<T,VDB extends ViewDataBinding,VH extends BaseRVAdapter.BaseViewHolder<VDB>> extends RecyclerView.Adapter<VH> { |
| | | |
| | | /** 上下文对象 */ |
| | | private final Context mContext; |
| | | protected final Context mContext; |
| | | |
| | | /** RecyclerView 对象 */ |
| | | private RecyclerView mRecyclerView; |
| | | protected RecyclerView mRecyclerView; |
| | | |
| | | /** 条目点击监听器 */ |
| | | private OnItemClickListener mItemClickListener; |
| | | protected OnItemClickListener mItemClickListener; |
| | | /** 条目长按监听器 */ |
| | | private OnItemLongClickListener mItemLongClickListener; |
| | | protected OnItemLongClickListener mItemLongClickListener; |
| | | /** |
| | | * 该 adapter 上绑定的滑动监听器 |
| | | */ |
| | | private MyOnScrollListener myOnScrollListener; |
| | | protected MyOnScrollListener myOnScrollListener; |
| | | |
| | | /** 条目子 View 点击监听器 */ |
| | | private SparseArray<OnChildClickListener> mChildClickListeners; |
| | | protected SparseArray<OnChildClickListener> mChildClickListeners; |
| | | /** 条目子 View 长按监听器 */ |
| | | private SparseArray<OnChildLongClickListener> mChildLongClickListeners; |
| | | protected SparseArray<OnChildLongClickListener> mChildLongClickListeners; |
| | | /** |
| | | * 列表数据 |
| | | */ |
| | | private List<T> mDataList; |
| | | protected List<T> mDataList; |
| | | |
| | | public BaseRVAdapter(Context context) { |
| | | mContext = context; |
| | |
| | | |
| | | @NonNull |
| | | @Override |
| | | public BaseViewHolder<VDB> onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { |
| | | public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { |
| | | VDB itemBind = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()),getLayoutId(),parent,false); |
| | | return new BaseViewHolder<>(itemBind); |
| | | return getViewHolder(itemBind,viewType); |
| | | } |
| | | |
| | | protected abstract int getLayoutId(); |
| | | protected abstract void onBind(BaseViewHolder<VDB> holder, int position); |
| | | protected abstract void onBind(VH holder, int position); |
| | | protected abstract VH getViewHolder(VDB itemBind,int viewType); |
| | | |
| | | @Override |
| | | public void onBindViewHolder(@NonNull BaseViewHolder<VDB> holder, int position) { |
| | | public void onBindViewHolder(@NonNull VH holder, int position) { |
| | | View itemView = holder.itemView; |
| | | // 设置条目的点击和长按事件 |
| | | if (mItemClickListener != null) { |
| | |
| | | * @param <VDB> |
| | | */ |
| | | public static class BaseViewHolder<VDB extends ViewDataBinding> extends RecyclerView.ViewHolder{ |
| | | private VDB binding; |
| | | protected VDB binding; |
| | | public BaseViewHolder(@NonNull View itemView) { |
| | | super(itemView); |
| | | |
| | |
| | | if (mDataList == null || mDataList.size() == 0) { |
| | | setData(data); |
| | | } else { |
| | | mDataList.addAll(data); |
| | | notifyDataSetChanged(); |
| | | //一个一个的添加 |
| | | for (T datum : data) { |
| | | addItem(datum); |
| | | } |
| | | } |
| | | } |
| | | /** |
| | | * 从头部 追加一些数据 by hyz |
| | | * 从头部 追加一些数据 |
| | | */ |
| | | public void addDataFormHead(List<T> data) { |
| | | public void addDataFromHead(List<T> data) { |
| | | if (data == null || data.size() == 0) { |
| | | return; |
| | | } |