当前位置:网站首页>DataBinding下的RecycleView适配器Adapter基类
DataBinding下的RecycleView适配器Adapter基类
2022-08-04 00:01:00 【建人尹口】
public abstract class BaseAdapter<T, B extends ViewDataBinding>
extends RecyclerView.Adapter<BaseViewHolder> {
private final ObservableList<T> mData;
public BaseAdapter() {
this(new ObservableArrayList<>());
}
public BaseAdapter(@NonNull ObservableList<T> dataList) {
mData = dataList;
mData.addOnListChangedCallback(new ObservableList.OnListChangedCallback<ObservableList<T>>() {
@Override
public void onChanged(ObservableList<T> sender) {
notifyDataSetChanged();
}
@Override
public void onItemRangeChanged(ObservableList<T> sender, int positionStart, int itemCount) {
notifyItemRangeChanged(positionStart, itemCount);
}
@Override
public void onItemRangeInserted(ObservableList<T> sender, int positionStart, int itemCount) {
notifyItemRangeInserted(positionStart, itemCount);
}
@Override
public void onItemRangeMoved(ObservableList<T> sender, int fromPosition, int toPosition, int itemCount) {
notifyItemMoved(fromPosition, toPosition);
}
@Override
public void onItemRangeRemoved(ObservableList<T> sender, int positionStart, int itemCount) {
notifyItemRangeRemoved(positionStart, itemCount);
}
});
}
public void setData(List<T> data) {
mData.clear();
addData(data);
}
public void addData(List<T> data) {
if (data != null && data.size() > 0) {
mData.addAll(data);
}
}
public @NonNull List<T> getData() {
int size = getItemCount();
List<T> resList = new ArrayList<>(size);
if (size > 0) {
resList.addAll(mData);
}
return resList;
}
public void updateItem(T item) {
int index = mData.indexOf(item);
if (index > -1) {
mData.set(index, item);
}
}
@NonNull
@Override
public BaseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
B binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()),
getItemLayoutId(), parent, false);
return new BaseViewHolder(binding.getRoot());
}
@Override
public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) {
B binding = DataBindingUtil.getBinding(holder.itemView);
onBindItem(mData.get(position), binding);
}
@Override
public int getItemCount() {
return mData.size();
}
/**
* 获取item项布局资源id
* @return 布局资源id
*/
public abstract @LayoutRes int getItemLayoutId();
/**
* 绑定数据
* @param item 数据项
* @param binding 绑定
*/
public abstract void onBindItem(T item, B binding);
}其中
public final class BaseViewHolder extends RecyclerView.ViewHolder {
public BaseViewHolder(@NonNull View itemView) {
super(itemView);
}
}边栏推荐
猜你喜欢

Flutter教程之为什么 Flutter 是创业的最佳选择?

C# wpf使用ffmpeg命令行实现录屏

建木DevOps流程的快速运用

一文搞定 SQL Server 执行计划

分子个数 数论(欧拉函数 前缀和

超级完美版布局有快捷键,有背景置换

Creo 9.0二维草图的诊断:加亮开放端点

After building the pytorch environment, the pip and conda commands cannot be used

伦敦银最新均线分析系统怎么操作?

A simple understanding of TCP, learn how to shake hands, wave hands and various states
随机推荐
Install third-party packages via whl
Graph-node:创建一个新的subgraph
ros mavros stereo读取rosbag并记录IMU和图片到文件夹
C语言实验十五 文件
响应式织梦模板塑身瑜伽类网站
关于mnn模型输出的数据杂乱无章问题
LYVE1抗体丨Relia Tech LYVE1抗体解决方案
FinClip, help smart TV more imagination
Flutter教程之为什么 Flutter 是创业的最佳选择?
响应式织梦模板餐饮酒店类网站
corn表达式 具体详解与案例
Why Flutter Flutter of tutorials is the best choice for business?
Talking about the future development direction of my country's industrial parks
简单了解下 TCP,学习握手和挥手以及各种状态到底是怎么样的
C语言实验十四 结构体
Creo 9.0二维草图的诊断:重叠几何
After building the pytorch environment, the pip and conda commands cannot be used
代码重构:面向单元测试
C# wpf使用ffmpeg命令行实现录屏
Unity 截取3D图像 与 画中画PIP的实现