android 如何在不通知整个项目的情况下更新回收视图中特定位置的数据?(例如文本、图像等)

7qhs6swi  于 2023-01-15  发布在  Android
关注(0)|答案(3)|浏览(105)

我需要的功能,以更新数据的项目在回收视图。现在,如果我们通知整个项目,它显示了一些波动,我们要避免刷新整个项目的用户界面。
我使用的是带有diff实用程序的ListAdapter。

k7fdbhmy

k7fdbhmy2#

有很多方法可以达到你的目标。
1.自我管理项目。适配器不知道任何关于项目内容的事情,它只把项目放入RecyclerView。内容由项目本身管理,所以你的问题已经解决了。
1.自定义适配器。2适配器对每一项都有复杂的知识,并能相应地更新选定的项。

  1. AsyncListDiffer您可以添加差异到您的适配器,它将负责不更新不需要更新的部分。
    在没有看到代码的情况下,我们无法判断哪种方式最适合您,但我想在已经工作的代码上添加差异是最简单的。
osh3o9ms

osh3o9ms3#

如果您正在讨论更新特定的列表项,并且您没有使用DiffUtil(它将为您处理它),那么您需要在Adapter上调用适当的notify*方法。
它们分为两类,* 项目改变事件 *(其中项目列表保持不变,但是那些项目中的一个或多个的显示数据改变)和 * 结构改变 * 事件(其中项目的实际列表以某种方式改变,例如插入/移除或重新排序)。
我假设您只想更新某个项目的显示数据,因此应该使用notifyItemChangednotifyItemRangeChanged方法之一来通知适配器某个项目(或项目范围)需要更新。如果这些项目中的任何一个当前正在ViewHolder中显示,那么onBindViewHolder将为这些项目再次调用-这是您设置所有文本的地方,图像等,这取决于你正在显示的项目。所以你会更新他们与当前的数据。
这两个方法都有一个版本,它接受Object/Any的有效负载,您可以在其中传入 * 一些数据 *,以便在部分绑定中使用-基本上,onBindViewHolder可以接收这些数据,并更智能地进行更新,这意味着您可以避免重载图像之类的事情。通过传入 some stuff 并在绑定过程中检查它。如果需要的话,可以在onBindViewHolder的其他版本中实现关于它的更多信息。

相关问题