我正在尝试随时间更改 RecyclerView
中的字段。每个单独的 ViewHolder
都包含一个 CardView
和一些内部 View 。我想要动画的唯一 View 是带有时间的 View 。如您所见,没有动画:
adapter.notifyDataSetChanged();
逐个更新项目没有帮助,因为整个 CardView
都会闪烁:
int len = adapter.getItemCount();
for(int i=0;i<len;i++) {
adapter.notifyItemChanged(i);
}
有没有办法获取所有 ViewHolders
的列表,然后更新(动画)每个 TextView
里面的那个?
最佳答案
您可以通过传递有效负载 Object
来通知 RecyclerView.Adapter
的观察者发布您的 RecyclerView.ViewHolders
的部分更新。
notifyItemRangeChanged(positionStart, itemCount, payload);
payload
可以是或包含表示相对或绝对时间的标志。要将 payload
绑定(bind)到您的 View 持有者,请覆盖适配器中的以下 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
中指定的时间格式。
关于android - RecyclerView.ViewHolder 部分更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36956643/