Skip to content

BaseDifferAdapter

mumu edited this page Aug 26, 2022 · 2 revisions

BaseDifferAdapter

继承自BaseQuickAdapter

此类使用Differ方式来管理数据,进行数据的局部刷新。新旧数据的差异化对比是异步的,不会导致UI阻塞,不仅适合常用列表,也适合超大数据列表、超频繁的数据刷新列表(例如:股票实时涨跌列表)

基本使用

  1. 数据对象注意事项
    • Java 编写的数据类型,需要实现equals()方法
      public class Entity {
          ...
          @Override
          public boolean equals(Object o) {
              // 实现此系统方法
          }
      }
    • kotlin 编写的数据类型,需要是 data class 类型就行了。
      data class Entity(val test: String) {
      }
  2. 实现 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? {
             // 可选实现
         }
     }
  3. 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 一致,不再赘述