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