-
Notifications
You must be signed in to change notification settings - Fork 5.2k
BaseDifferAdapter
mumu edited this page Sep 8, 2025
·
5 revisions
继承自
BaseQuickAdapter
此类已过期!请勿再直接使用。BaseQuickAdapter已经集成Diff功能
此类已过期!请勿再直接使用。BaseQuickAdapter已经集成Diff功能
此类已过期!请勿再直接使用。BaseQuickAdapter已经集成Diff功能
此类使用Differ方式来管理数据,进行数据的局部刷新。新旧数据的差异化对比是异步的,不会导致UI阻塞,不仅适合常用列表,也适合超大数据列表、超频繁的数据刷新列表(例如:股票实时涨跌列表)
- 数据对象注意事项
-
Java编写的数据类型,需要实现equals()方法public class Entity { ... @Override public boolean equals(Object o) { // 实现此系统方法 } }
-
kotlin编写的数据类型,需要是data class类型就行了。data class Entity(val test: String) { }
-
- 实现
DiffUtil.ItemCallback<T>类,用于进行新老数据对比,进行精准刷新class EntityDiffCallback: DiffUtil.ItemCallback<DiffEntity>() { override fun areItemsTheSame(oldItem: DiffEntity, newItem: DiffEntity): Boolean { // 判断是否是同一个 item(通常使用id字段判断) } override fun areContentsTheSame(oldItem: DiffEntity, newItem: DiffEntity): Boolean { // 如果是同一个item,则判断item内的数据内容是否有变化 } override fun getChangePayload(oldItem: DiffEntity, newItem: DiffEntity): Any? { // 可选实现 } }
- Adapter 的编写与
BaseQuickAdapter一致class TestAdapter :BaseDifferAdapter<DiffEntity, QuickViewHolder>(EntityDiffCallback()) { override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): QuickViewHolder { // 创建 ViewHolder return QuickViewHolder(R.layout.layout_animation, parent) } override fun onBindViewHolder(holder: QuickViewHolder, position: Int, item: DiffEntity?) { // 设置 item 数据 } }
与 BaseQuickAdapter 一致,不再赘述