防止在 Recycler View 中的单个 Item 内的 View 在适配器刷新时刷新

Prevent a View inside a single Item in Recycler View to get refreshed when adapter is refreshed

我有一个 Recycler 视图,其中单行包含多个视图,包括视频、统计信息和一个按钮。

该按钮用于增加该项目的 like 统计值,并使用该位置的 notifyItemChange 更新我的适配器。

我的问题是,当该行刷新并更新我的统计信息时,视频将重置,我将不得不重新从头加载数据。

我想要的是像 Facebook 应用程序,用户在其中为单行项目添加情感,但视图(视频)不会刷新,只有某些项目会刷新,比如情感统计。

你必须使用有效负载。这意味着,当通知适配器有关数据集更改时,您还传递了有效载荷,并且此有效载荷被传递到适配器内的适当回调,您可以在其中决定哪些视图需要失效。

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
}

您可以查看 作为示例。

您应该考虑使用

void notifyItemChanged (int position,Object payload)

并捕获

中的有效载荷
void onBindViewHolder (VH holder,int position, List<Object> payloads)

根据解析的payloads,您可以在ViewHolder

中刷新您的部分view
@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
    }
}