java - 是否可以使用嵌套数组列表进行 DiffUtil.Callback
问题描述
我对 Android 中的 DiffUtil.Callback 类有疑问,该类用于有效计算两个列表之间的差异。它通常与 RecyclerView 结合使用。在我找到的所有示例中,他们使用的列表如下
ArrayList<CustomObject> newList;
ArrayList<CustomObject> oldList;
// the other methods that need to be overridden
// e.g. getOldListSize(), getNewListSize() etc.
我的问题是:是否可以使用如下列表编写 DiffUtil.Callback ...
ArrayList<ArrayList<CustomObject>> oldList;
ArrayList<ArrayList<CustomObject>> newList;
有可能吗?如果没有,为什么不呢。如果是,扩展 DiffUtil.Callback 的类会是什么样子?
解决方案
您必须在 areItemsTheSame 和 areContentsTheSame 方法中迭代嵌套列表。如果任何项目已更改,则返回 false。
class FilterDiffUtilCallback : DiffUtil.ItemCallback<FilterUIModel>() {
override fun areItemsTheSame(oldItem: FilterUIModel, newItem: FilterUIModel): Boolean {
return oldItem.name == newItem.name
}
override fun areContentsTheSame(oldItem: FilterUIModel, newItem: FilterUIModel): Boolean {
val size = oldItem.filterDataUiModel?.size ?: 0
for (index in 0 until size) {
if(oldItem.filterDataUiModel?.get(index) != newItem.filterDataUiModel?.get(index))
{
return false
}
}
return oldItem == newItem
}
}
推荐阅读
- javascript - DOMException: play() 请求被中断
- mongodb - 动态生成mongodb集合名称后缀
- php - 如何在 Laravel 框架中使用 Eloquent 将文件插入数据库?
- html - 从网站运行 R 代码(无付费托管)
- .net-core - 急切加载仅出现在某些结果中
- javascript - 如何从其 URL 验证图像?
- c++ - 如何将类成员设置为默认值?
- javascript - 从 Vue 访问 data() 对象
- sql - SQL Count with Joins 返回重复项
- reactjs - React Typescript 泛型 - 类型“未知”不可分配给类型“数字”