猿问

更新RecyclerView的一部分

我有一个回收视图,其中包含评论的描述和投票计数,当我按下时,我需要增加计数,这就是目前的样子 

但问题是,当我按下投票确实增加,但直到我关闭该片段并重新打开它它不会更新


实际发生的情况是,当我按下投票按钮时,它会进行一个 API 调用,该调用会执行一些逻辑并将其发送到 android,其中 android 系统对被单击或投票的特定项目有很多投票


我如何更新该特定记录,以便我可以在不重新打开视图的情况下看到更改


代码:CommentItem.java




public CommentItem(String id, String description, String voteCount)

        this.id = id;

        this.description= description;

        this.voteCount = voteCount;

}

//getters and setters

CommentItemAdapter.java


...

private OnItemClickListener mlistener;

/*Interfaces*/

public  interface  OnItemClickListener{

    void VoteUpClick(int position);

    void VoteDownClick(int position);

...

}

...


ITMISS
浏览 120回答 2
2回答

侃侃无极

如果我做对了,我adapter.notifyDataSetChanged()就会更新你的列表。但是有更好的方法,DiffUtils在recyclerView中使用。也就是说,比较新旧列表,仅更新更改的项目,而不更改整个数据集。其他方法是,当 onItemClick 发生时,通过 .Activity/Or Fragment 获取 viewHolder 引用recyclerView.findViewHolderForAdapterPosition(position)。然后通过这个视图改变视图

开满天机

这里很多人都有很好的建议可以使用DiffUtils。这是处理RecycleView.现在执行此操作的最佳方法是使用ListAdapter,这需要一个DiffUtil.ItemCallbackor AsyncDifferConfig。ListAdapter 的一大优点是所有不同的逻辑都是在后台完成的,这反过来又优化了您的 UI。您需要的一切就是覆盖这个 funs:areItemsTheSame()和areContentsTheSame(),此外您还有getChangePayload()- 有关更改项目的详细信息。不要使用notifyDataSetChanged()和其他范围更新函数,所有这些东西都是在幕后处理的。您的案例可以通过不同的方法来处理。我更喜欢有一个中间状态,它会通知用户发生了一些事情。因此,您可以在本地将该评论标记为待投票,例如黄色箭头,当从后端获得响应时,您只需刷新即可,它将data-list为ItemCallback您执行差异技巧。当检索响应并应用投票时,它可以标记为绿色箭头。这些只是关于正确流程的想法。无论如何,您需要的就是使用 ,并且ListAdapter.sumbitList(newDataSet)内部将使用 ItemCallback 来比较新旧列表。differListAdapter
随时随地看视频慕课网APP

相关分类

Java
我要回答