BaseRecyclerViewAdapterHelper
BaseRecyclerViewAdapterHelper copied to clipboard
3.0.4版本DiffUtil,如果只修改了其中一个Item的某个字段的内容,则不会刷新页面。
3.0.4版本DiffUtil,如果只修改了其中一个Item的某个字段的内容,则不会刷新页面。DiffCallBack中areContentsTheSame方法返回内容相同,而且oldItem和newItem的数据尽然都是修改过后的。
如图,已经修改了amount字段从3522到352,但日志显示新旧数据尽然都是修改后的352。
DiffCallback:
设置数据(result为数据库获取的结果):
+1
+1
我也是,斷點進去看到裡面的值變了,但是adapter沒有刷新
断点到submitList方法里,这里传入的newList居然和adapter.getData是一样的。问题出现在这里,应该是引用了同一个data,导致出的问题
是的,今天搞了半天,必须要深拷贝才行,否则修改的肯定是同一个内存地址值的数据
这个不是库的问题,可以看一下DiffUtil实现,Android官方库中是AsyncListDiffer.java, brvah是在BrvahAsyncDiffer.kt 比较时使用的oldList其实就是getData()中的数据,newList是你调用setDiffNewData时传入的数据。
所以直接修改adapter中引用的数据,然后使用diffUtil比较是无效的。这个如果之前使用notifyDataChange或者notifyItemChange方法做局部刷新迁移到diffutil会比较容易碰到这个坑。
me too