当前位置:网站首页>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);
}
}
边栏推荐
猜你喜欢
LYVE1抗体丨Relia Tech LYVE1抗体解决方案
The super perfect layout has shortcut keys and background replacement
七夕活动浪漫上线,别让网络拖慢和小姐姐的开黑时间
POE交换机全方位解读(下)
The "interaction design" battle of the smart cockpit
响应式织梦模板除尘器类网站
【杂项】通过Excel为字符串产生条码
直播系统聊天技术(八):vivo直播系统中IM消息模块的架构实践
分布式事务框架 seata
Nanoprobes Alexa Fluor 488 FluoroNanogold 偶联物
随机推荐
Using matlab to solve the linear optimization problem based on matlab dynamic model of learning notes _11 】 【
代码重构:面向单元测试
Nanoprobes Mono- Sulfo -NHS-Nanogold的使用和应用
The super perfect layout has shortcut keys and background replacement
Salesforce's China business may see new changes, rumors may be closing
20年将投资美国约2000亿美元,三星电子财大气粗的样子真好看
双目IMU标定kalibr
Install third-party packages via whl
小身材有大作用——光模块基础知识(一)
重新认识浏览器的渲染过程
The "interaction design" battle of the smart cockpit
【LeetCode】最长回文子序列(动态规划)
我的祖国
查看CUDA、pytorch等的版本号
BioVendor人Clara细胞蛋白(CC16)Elisa试剂盒检测步骤
Read FastDFS in one article
七夕?new一个对象
Three.js入门详解
2015年开源大事件汇总
2022年8月份DAMA-CDGA/CDGP数据治理认证招生简章