我需要的功能,以更新数据的项目在回收视图。现在,如果我们通知整个项目,它显示了一些波动,我们要避免刷新整个项目的用户界面。我使用的是带有diff实用程序的ListAdapter。
z5btuh9x1#
您需要创建自定义适配器:https://developer.android.com/develop/ui/views/layout/recyclerview
k7fdbhmy2#
有很多方法可以达到你的目标。1.自我管理项目。适配器不知道任何关于项目内容的事情,它只把项目放入RecyclerView。内容由项目本身管理,所以你的问题已经解决了。1.自定义适配器。2适配器对每一项都有复杂的知识,并能相应地更新选定的项。
AsyncListDiffer
osh3o9ms3#
如果您正在讨论更新特定的列表项,并且您没有使用DiffUtil(它将为您处理它),那么您需要在Adapter上调用适当的notify*方法。它们分为两类,* 项目改变事件 *(其中项目列表保持不变,但是那些项目中的一个或多个的显示数据改变)和 * 结构改变 * 事件(其中项目的实际列表以某种方式改变,例如插入/移除或重新排序)。我假设您只想更新某个项目的显示数据,因此应该使用notifyItemChanged或notifyItemRangeChanged方法之一来通知适配器某个项目(或项目范围)需要更新。如果这些项目中的任何一个当前正在ViewHolder中显示,那么onBindViewHolder将为这些项目再次调用-这是您设置所有文本的地方,图像等,这取决于你正在显示的项目。所以你会更新他们与当前的数据。这两个方法都有一个版本,它接受Object/Any的有效负载,您可以在其中传入 * 一些数据 *,以便在部分绑定中使用-基本上,onBindViewHolder可以接收这些数据,并更智能地进行更新,这意味着您可以避免重载图像之类的事情。通过传入 some stuff 并在绑定过程中检查它。如果需要的话,可以在onBindViewHolder的其他版本中实现关于它的更多信息。
DiffUtil
Adapter
notify*
notifyItemChanged
notifyItemRangeChanged
ViewHolder
onBindViewHolder
Object
Any
3条答案
按热度按时间z5btuh9x1#
您需要创建自定义适配器:
https://developer.android.com/develop/ui/views/layout/recyclerview
k7fdbhmy2#
有很多方法可以达到你的目标。
1.自我管理项目。适配器不知道任何关于项目内容的事情,它只把项目放入RecyclerView。内容由项目本身管理,所以你的问题已经解决了。
1.自定义适配器。2适配器对每一项都有复杂的知识,并能相应地更新选定的项。
AsyncListDiffer
您可以添加差异到您的适配器,它将负责不更新不需要更新的部分。在没有看到代码的情况下,我们无法判断哪种方式最适合您,但我想在已经工作的代码上添加差异是最简单的。
osh3o9ms3#
如果您正在讨论更新特定的列表项,并且您没有使用
DiffUtil
(它将为您处理它),那么您需要在Adapter
上调用适当的notify*
方法。它们分为两类,* 项目改变事件 *(其中项目列表保持不变,但是那些项目中的一个或多个的显示数据改变)和 * 结构改变 * 事件(其中项目的实际列表以某种方式改变,例如插入/移除或重新排序)。
我假设您只想更新某个项目的显示数据,因此应该使用
notifyItemChanged
或notifyItemRangeChanged
方法之一来通知适配器某个项目(或项目范围)需要更新。如果这些项目中的任何一个当前正在ViewHolder
中显示,那么onBindViewHolder
将为这些项目再次调用-这是您设置所有文本的地方,图像等,这取决于你正在显示的项目。所以你会更新他们与当前的数据。这两个方法都有一个版本,它接受
Object
/Any
的有效负载,您可以在其中传入 * 一些数据 *,以便在部分绑定中使用-基本上,onBindViewHolder
可以接收这些数据,并更智能地进行更新,这意味着您可以避免重载图像之类的事情。通过传入 some stuff 并在绑定过程中检查它。如果需要的话,可以在onBindViewHolder
的其他版本中实现关于它的更多信息。