当前位置:网站首页>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);
}
}
边栏推荐
- 【职场杂谈】售前与销售工作配合探讨
- V8中的快慢数组(附源码、图文更易理解)
- In V8 how arrays (with source code, picture and text easier to understand)
- Super perfect version of the layout have shortcut, background replacement (solve the problem of opencv Chinese path)
- After building the pytorch environment, the pip and conda commands cannot be used
- Salesforce's China business may see new changes, rumors may be closing
- Graph-node:创建一个新的subgraph
- Nanoprobes丨Nanogold-抗体和链霉亲和素偶联物
- LeetCode 0155. 最小栈
- 【OpenCV图像处理】 图像拼接技术
猜你喜欢
Nanoprobes Mono- Sulfo -NHS-Nanogold的使用和应用
Nanoprobes 棕榈酰纳米金相关说明书
超级完美版布局有快捷键,有背景置换
A simple understanding of TCP, learn how to shake hands, wave hands and various states
Salesforce的中国区业务可能出现新变化,传言可能正在关闭
栈的压入、弹出序列
Free自由协议系统开发
2015年开源大事件汇总
查看CUDA、pytorch等的版本号
[Miscellaneous] How to install the specified font into the computer and then use the font in the Office software?
随机推荐
689. 三个无重叠子数组的最大和
Justin Sun: Web3.0 and the Metaverse will assist mankind to enter the online world more comprehensively
(PC+WAP)织梦模板不锈钢类网站
sqlnet.ora文件与连接认证方式的小测试
LeetCode 19:删除链表的倒数第 N 个结点
分布式事务框架 seata
代码重构:面向单元测试
libnet
建木DevOps流程的快速运用
leetcode/子串中不能有重复字符的最长子串
Salesforce's China business may see new changes, rumors may be closing
Three.js入门详解
Shell 用法梳理总结
2015年开源大事件汇总
vscode插件设置——Golang开发环境配置
并查集详解
Shell编程之循环语句与函数
Go编译原理系列7(Go源码调试)
响应式织梦模板塑身瑜伽类网站
七夕活动浪漫上线,别让网络拖慢和小姐姐的开黑时间