现在我在我的项目中发现了一个错误
val diffCallback = diff.newInstance(list, newList)
val diffResult = DiffUtil.calculateDiff(diffCallback)
list.clear()
list.addAll(newList)
diffResult.dispatchUpdatesTo(this)
这是我适配器中的差异代码,您可以看到我清除了旧列表并更新了新列表。
但是我在viewholder中使用数据,并在视图中设置标签。
当我在视图中将旧数据设置为标记时,然后对列表进行差异化处理,因为此diffUtil返回true,因此视图也在其标记中处理了旧数据,但是在diff时总是更新适配器列表,因此当我使用adapter.list.getindex(data)
会得到-1,因为视图标记是旧数据,并且即使旧列表数据视图==新列表,我的适配器列表也必须更新新列表。
当我删除list.clear() list.addAll(newList)
时,差异无法成功,
有人可以告诉我为什么?以及如何解决这个问题?