-
Notifications
You must be signed in to change notification settings - Fork 5.2k
BaseDifferAdapter
mumu edited this page Aug 26, 2022
·
2 revisions
继承自
BaseQuickAdapter
此类使用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 一致,不再赘述