RecyclerView的稳定ID与DiffCallback

问题描述 投票:1回答:1

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

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

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

我应该将setHasStableIds(true)getItemId()结合使用,还是应该使用DiffCallback在其中可以覆盖areItemsTheSame()areContentsTheSame()

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

android android-recyclerview recycler-adapter
1个回答
0
投票

如果可以的话,您应该始终选择DiffCallback。稳定的ID只能比较身份,而不能比较内容。由于RecyclerView被迫假定内容可能已更改,并重新绑定/执行更改了项目的动画,因此这恰好导致您描述的更改项目内容的闪烁效果。 DiffCallback没有这种限制,并且如果正确实现了回调,将始终做正确的事情。

© www.soinside.com 2019 - 2024. All rights reserved.