在适配器刷新时,防止在Recycler View中的单个项内部查看刷新

时间:2017-02-08 09:18:49

标签: android android-layout android-recyclerview android-view android-adapter

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

该按钮用于将like statistic的值递增到该项,并使用notifyItemChange为该位置更新我的适配器。

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

我想要的是Facebook应用,用户为单个行项目添加情感,但视图(视频)不会刷新,只有某些项目会被刷新,如情绪统计。

2 个答案:

答案 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作为示例。