Android RecyclerView的稳定Id与DiffCallback

Android RecyclerView的稳定Id与DiffCallback,android,android-recyclerview,Android,Android Recyclerview,我有一个用于显示在我的RecyclerView中的数据的自定义类。对于类中的id字段,每个对象和每一行都有一个唯一的id值 每当我刷新数据时,列表就会被清除、重新填充,并调用notifyDataSetChanged()。这会导致闪烁效果 在这些刷新期间,虽然id保持不变,但其他一些字段正在更改,其中一些更改的字段应反映在项目视图中 我应该将setHassTableId(true)与getItemId()结合使用,还是应该使用DiffCallback来覆盖areItemsTheSame()和are

我有一个用于显示在我的RecyclerView中的数据的自定义类。对于类中的
id
字段,每个对象和每一行都有一个唯一的id值

每当我刷新数据时,列表就会被清除、重新填充,并调用
notifyDataSetChanged()
。这会导致闪烁效果

在这些刷新期间,虽然id保持不变,但其他一些字段正在更改,其中一些更改的字段应反映在项目视图中

我应该将
setHassTableId(true)
getItemId()
结合使用,还是应该使用DiffCallback来覆盖
areItemsTheSame()
areContentsTheSame()


如果我使用前者,我不确定它是否可以检测其他字段中的更改并更新行。

如果可以,您应该始终选择
DiffCallback
。稳定的ID只能比较标识,不能比较内容。这会导致您在项目内容更改时描述的闪烁效果,因为
RecyclerView
被迫假定内容可能已更改,并重新绑定/执行项目更改动画
DiffCallback
没有这样的限制,如果回调正确实现,它将始终做正确的事情。

如果可以,您应该始终选择
DiffCallback
。稳定的ID只能比较标识,不能比较内容。这会导致您在项目内容更改时描述的闪烁效果,因为
RecyclerView
被迫假定内容可能已更改,并重新绑定/执行项目更改动画
DiffCallback
没有这样的限制,如果正确实现回调,它将始终做正确的事情