我有一个Recycler View,其中单行包含多个视图,包括视频,统计信息和按钮。
该按钮用于将like statistic的值递增到该项,并使用notifyItemChange为该位置更新我的适配器。
我的问题是,当该行刷新并更新我的统计信息时,视频将重置,我将不得不从头开始加载数据。
我想要的是Facebook应用,用户为单个行项目添加情感,但视图(视频)不会刷新,只有某些项目会被刷新,如情绪统计。
答案 0 :(得分:4)
你应该考虑使用
void notifyItemChanged (int position,Object payload)
并在
中捕获有效负载void onBindViewHolder (VH holder,int position, List<Object> payloads)
根据已解析的payloads
,您可以刷新view
ViewHolder
的部分内容
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, List<Object> payloads) {
if(payloads == null || payloads.isEmpty()) {
onBindViewHolder(holder, position);//your normal method
}
else {
//partial refresh
}
}
答案 1 :(得分:3)
您必须使用有效负载。这意味着,当通知适配器有关数据集更改时,您还传递有效负载,并且此有效负载将传递到适配器中的适当回调,您可以在其中决定需要使哪个视图无效。
adapter.notifyItemChanged(position, payload); // payload is an Object
您将在onBindViewHolder
适配器中收到此有效内容:
public void onBindViewHolder(HelloViewHolder holder, int position, List<Object> payload) {
// decide what to update based on the payload
}
您可以查看this作为示例。