2 回答
TA贡献2051条经验 获得超10个赞
如果我做对了,我adapter.notifyDataSetChanged()
就会更新你的列表。但是有更好的方法,DiffUtils
在recyclerView中使用。也就是说,比较新旧列表,仅更新更改的项目,而不更改整个数据集。
其他方法是,当 onItemClick 发生时,通过 .Activity/Or Fragment 获取 viewHolder 引用recyclerView.findViewHolderForAdapterPosition(position)
。然后通过这个视图改变视图
TA贡献1786条经验 获得超12个赞
这里很多人都有很好的建议可以使用DiffUtils
。这是处理RecycleView
.
现在执行此操作的最佳方法是使用ListAdapter
,这需要一个DiffUtil.ItemCallback
or AsyncDifferConfig
。ListAdapter 的一大优点是所有不同的逻辑都是在后台完成的,这反过来又优化了您的 UI。您需要的一切就是覆盖这个 funs:areItemsTheSame()
和areContentsTheSame()
,此外您还有getChangePayload()
- 有关更改项目的详细信息。不要使用notifyDataSetChanged()
和其他范围更新函数,所有这些东西都是在幕后处理的。
您的案例可以通过不同的方法来处理。我更喜欢有一个中间状态,它会通知用户发生了一些事情。因此,您可以在本地将该评论标记为待投票,例如黄色箭头,当从后端获得响应时,您只需刷新即可,它将data-list
为ItemCallback
您执行差异技巧。当检索响应并应用投票时,它可以标记为绿色箭头。这些只是关于正确流程的想法。
无论如何,您需要的就是使用 ,并且ListAdapter.sumbitList(newDataSet)
内部将使用 ItemCallback 来比较新旧列表。differ
ListAdapter
添加回答
举报