gpt4 book ai didi

android - 什么更好?循环中的 notifyDataSetChanged 或 notifyItemChanged?

转载 作者:IT王子 更新时间:2023-10-28 23:47:19 33 4
gpt4 key购买 nike

所以我有一个 Activity RecyclerView我想改变TextView RecyclerView 中的每一项通过按下具有 onClickListener() 的按钮在 Activity 中。

我想知道在性能方面什么更好:

  1. 使用 notifyDataSetChanged那些。
  2. 在 int i 小于 List.size() 等条件下使用循环在哪里 notifyItemChanged会被调用几次。

在这两种情况下,我都会在 RecyclerView 中创建 bool 变量。 onBindViewHolder 使用的适配器知道如何更新项目。默认为假,点击按钮后变为真,所以onBindViewHolder以不同的方式更新项目。

我也想知道这种方法是否合适。

最佳答案

如果您只是更新 View 的一部分,请使用 notifyItemRangeChanged()notifyItemChanged() 而不是 notifiyDataSetChanged()。这里的区别在于结构变化项目变化。这是在 Android 开发人员 RecyclerView.Adapter 文档中找到的 here .

这里是关于这两种变化之间差异的另一个花絮:

There are two different classes of data change events, item changes and structural changes. Item changes are when a single item has its data updated but no positional changes have occurred. Structural changes are when items are inserted, removed or moved within the data set.

这是取自上述页面,

If you are writing an adapter it will always be more efficient to use the more specific change events if you can. Rely on notifyDataSetChanged() as a last resort.

所以只是为了澄清使用 notifyDataSetChanged() 作为最后的手段,而是问自己是否可以执行其中一种方法,以及是否可以使用它而是:

notifyItemChanged(int)
notifyItemInserted(int)
notifyItemRemoved(int)
notifyItemRangeChanged(int, int)
notifyItemRangeInserted(int, int)
notifyItemRangeRemoved(int, int)

这是有道理的,因为 notifyDataSetChanged() 几乎会尝试根据数据重绘所有内容,并且不会对它做任何先前的假设,而其他方法只会寻找更改。这意味着适配器必须做更多不必要的工作。这就是 notifyDataSetChanged() 所做的:

This event does not specify what about the data set has changed, forcing any observers to assume that all existing items and structure may no longer be valid. LayoutManagers will be forced to fully rebind and relayout all visible views.

使用增量或范围方法也很有意义,因为您正在更改文本,您需要获取每个新文本,并且当您这样做时,您应该告诉适配器您更改了它。现在,如果您单击按钮并获取所有新文本值,并创建一个新列表或其他内容,然后调用重的 notifyDataSetChanged()

关于android - 什么更好?循环中的 notifyDataSetChanged 或 notifyItemChanged?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33789345/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com