RecyclerView DiffUtil是否需要手动更新数据?

时间:2019-03-30 15:05:58

标签: android android-recyclerview recycler-adapter android-diffutils

现在我在我的项目中发现了一个错误

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)时,差异无法成功, 有人可以告诉我为什么?以及如何解决这个问题?

0 个答案:

没有答案