防止在 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
}
}
我有一个 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
}
}