我正在尝试在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更新为有效内容中指定的时间格式.