为了账号安全,请及时绑定邮箱和手机立即绑定

更新RecyclerView的一部分

更新RecyclerView的一部分

ITMISS 2023-07-13 15:42:23
我有一个回收视图,其中包含评论的描述和投票计数,当我按下时,我需要增加计数,这就是目前的样子 但问题是,当我按下投票确实增加,但直到我关闭该片段并重新打开它它不会更新实际发生的情况是,当我按下投票按钮时,它会进行一个 API 调用,该调用会执行一些逻辑并将其发送到 android,其中 android 系统对被单击或投票的特定项目有很多投票我如何更新该特定记录,以便我可以在不重新打开视图的情况下看到更改代码:CommentItem.javapublic CommentItem(String id, String description, String voteCount){         this.id = id;        this.description= description;        this.voteCount = voteCount;}//getters and settersCommentItemAdapter.java...private OnItemClickListener mlistener;/*Interfaces*/public  interface  OnItemClickListener{    void VoteUpClick(int position);    void VoteDownClick(int position);...}...
查看完整描述

2 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

如果我做对了,我adapter.notifyDataSetChanged()就会更新你的列表。但是有更好的方法,DiffUtils在recyclerView中使用。也就是说,比较新旧列表,仅更新更改的项目,而不更改整个数据集。

其他方法是,当 onItemClick 发生时,通过 .Activity/Or Fragment 获取 viewHolder 引用recyclerView.findViewHolderForAdapterPosition(position)。然后通过这个视图改变视图


查看完整回答
反对 回复 2023-07-13
?
开满天机

TA贡献1786条经验 获得超12个赞

这里很多人都有很好的建议可以使用DiffUtils。这是处理RecycleView.

现在执行此操作的最佳方法是使用ListAdapter,这需要一个DiffUtil.ItemCallbackor AsyncDifferConfig。ListAdapter 的一大优点是所有不同的逻辑都是在后台完成的,这反过来又优化了您的 UI。您需要的一切就是覆盖这个 funs:areItemsTheSame()areContentsTheSame(),此外您还有getChangePayload()- 有关更改项目的详细信息。不要使用notifyDataSetChanged()和其他范围更新函数,所有这些东西都是在幕后处理的。

您的案例可以通过不同的方法来处理。我更喜欢有一个中间状态,它会通知用户发生了一些事情。因此,您可以在本地将该评论标记为待投票,例如黄色箭头,当从后端获得响应时,您只需刷新即可,它将data-listItemCallback您执行差异技巧。当检索响应并应用投票时,它可以标记为绿色箭头。这些只是关于正确流程的想法。

无论如何,您需要的就是使用 ,并且ListAdapter.sumbitList(newDataSet)内部将使用 ItemCallback 来比较新旧列表。differListAdapter


查看完整回答
反对 回复 2023-07-13
  • 2 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信