我正在尝试在RecyclerView中随时更改该字段.每个ViewHolder单独包含一个CardView和其他几个视图.我想要动画的唯一视图是随着时间的推移.你可以看到,没有动画:
adapter.notifyDataSetChanged();
逐个更新项目并不有帮助,因为整个CardView闪烁:
int len = adapter.getItemCount();
for(int i=0;i<len;i++) {
adapter.notifyItemChanged(i);
}
有没有办法获取所有ViewHolders的列表,然后更新(动画)只是一个TextView里面的每一个?
解决方法
您可以通知您的RecyclerView.Adapter的观察者通过传递一个有效载荷对其进行部分更新RecyclerView.ViewHolders.
notifyItemRangeChanged(positionStart,itemCount,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更新为有效内容中指定的时间格式.