Android 使用 DiffUtil 处理 RecyclerView 数据更新问题
背景 RecyclerView.Adapter#notifyDataSetChanged() 会每次刷新整个布局; 每次手动调用 RecyclerView.Adapter#notifyItemXx 系列方法很麻烦; 需要在新增的项目中跟旧的列表项重复时,只更新内容,而不是插入重复项。 DiffUtil DiffUtil 就是为了简化 RecyclerVeiw 更新数据操作而生。其关键类和方法如下: 类 方法 描述 DiffUtil public static DiffResult calculateDiff (Callback cb) 根据 Callback 提供的数据分析出新旧数据列表的差异,返回 DiffResult DiffUtil.Callback public abstract int getOldListSize () 返回旧数据的数量 public abstract int getNewListSize () 返回新数据的数量 public abstract boolean areItemsTheSame (int oldItemPosition, int newItemPosition) 决定两个数据项是否是同一个 public abstract boolean areContentsTheSame (int oldItemPosition, int