[英]Partial update of RecyclerView.ViewHolder
我正在尝试在RecyclerView
随时间更改字段。 每个ViewHolder
包含一个CardView
和一些内部视图。 我想要制作动画的唯一视图是有时间的视图。 如您所见,没有动画:
adapter.notifyDataSetChanged();
逐个更新项目无济于事,因为整个CardView
会闪烁:
int len = adapter.getItemCount();
for(int i=0;i<len;i++) {
adapter.notifyItemChanged(i);
}
有没有办法获取所有ViewHolders
的列表,然后更新(动画)每个ViewHolders
中的一个TextView
?
你可以通知你的RecyclerView.Adapter
的观察员发出你的部分更新RecyclerView.ViewHolders
通过传递一个有效载荷Object
。
notifyItemRangeChanged(positionStart, itemCount, payload);
payload
可以是或包含表示相对或绝对时间的标志。 要将payload
绑定到视图持有者,请在适配器中覆盖以下onBindViewHolder(viewHolder, position, payloads)
方法,并检查payloads
参数以获取数据。
@Override
public void onBindViewHolder(MyViewHolder viewHolder, int position, List<Object> payloads) {
if (payloads.isEmpty()) {
// Perform a full update
onBindViewHolder(viewHolder, position);
} else {
// Perform a partial update
for (Object payload : payloads) {
if (payload instanceof TimeFormatPayload) {
viewHolder.bindTimePayload((TimeFormatPayload) payload);
}
}
}
}
在MyViewHolder.bindTimePayload(payload)
方法中,将TextViews
的时间更新为payload
指定的时间格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.