24

将 android studio 更新为 arctic fox 后,我收到此警告。但我不知道通知数据更改的有效方法是什么。在我的代码中,我从网络调用填充适配器,然后我通知数据集更改,但编译器给了我这个:

如果可以的话,使用更具体的更改事件总是更有效。依靠 notifyDataSetChanged 作为最后的手段。回收视图

编辑问题:希望我们使用

DiffUtil文档

而不是 notifyDataSetChanged() 因为它更快。在medium上查看这篇文章。

4

3 回答 3

34

这意味着如果您需要在 recyclerview 中一次更改整个项目列表,请使用notifyDataSetChanged().

如果您需要更改特定项目,那么最好使用notifyItemChanged(position)它,这样它就不会刷新和重新绑定整个数据集,如果数据集很大,这会影响性能。

所以这只是一个正常的建议或警告,没什么好担心的。:)

于 2021-07-31T17:40:38.003 回答
14

该函数notifyDataSetChanged本质上认为数据集中的所有数据都已更改。这会导致所有VISIBLE使用此数据的视图都被重绘。当只有一些数据发生变化时,这是不必要的。

您需要确定数据发生变化的位置并通知您的适配器仅更新这些项目。

您可以使用此方法通知特定位置的更改

  1. notifyItemChanged(int)
  2. notifyItemInserted(int)
  3. notifyItemRemoved(int)
  4. notifyItemRangeChanged(int, int)
  5. notifyItemRangeInserted(int, int)
  6. notifyItemRangeRemoved(int, int)
于 2021-08-12T09:40:51.247 回答
0

这只是 Android 工作室建议更新 RecyclerView 中的数据。

此建议仅使用特定位置更新通知回收站视图项目中的更改,例如 notifyItemChanged(int)、notifyItemInserted(int)、notifyItemRemoved(int)、notifyItemRangeChanged(int, int)、notifyItemRangeInserted(int, int)、notifyItemRangeRemoved(int,诠释)。

notifyDataSetChanged()应该作为最后的手段或最后的行动方案。此函数将再次重新初始化并重新绑定所有视图,这会降低性能。

于 2021-10-11T06:48:02.477 回答