使用"ListAdapter"是项目相同在没有唯一标识符的项目上



要正确实现在ListAdapter的构造函数内部传递的DiffUtil.ItemCallback<T>,必须同时实现areItemsTheSameareContentsTheSame

现在对于areItemsTheSame,建议使用类型为的唯一标识符。在我的例子中,数据类没有可演绎的唯一标识符,我该如何正确地实现它?当简单地在两个函数中执行oldItem == newItem时,我显然会在项目上得到一个闪烁的动画,因为它认为这是一个完全不同的项目,因为areItemsTheSame返回false。

那么人们如何正确地解决这个问题呢?返回true无论如何,如果数据类型是相同的,然后触发areContentsTheSame是一个修复?如果不是,为什么?如果我现在这样做,回收器会正确地理解只有一些数据发生了变化,只有视图中必要的部分才会"闪"出来。有了新数据

那么人们如何正确地解决这个问题呢?

"solution"是对每一行都有唯一的标识符(这对大多数关系数据结构来说是很好的建议)。

你可以在任何一个方法中组合字段,回调提供给你两个项目(旧的和新的),你可以决定在那里做什么/比较。

当项目"相同"时(由您的实现决定),然后这允许RecyclerView/Adapter组合做出假设(和优化)。

当项目被确定已经改变(意味着它们现在是两个不同的项目),那么一组不同的事情必须发生(动画,重新绑定,确定viewType,等等)。UI的更多工作。

所以不要对抗框架,而是提供一个唯一的标识符,即使它由多个字段组成。我很想看看你的数据类,以了解为什么没有唯一的方法来识别单行。

相关内容

  • 没有找到相关文章

最新更新