android - itemanimator - Actualización parcial de RecyclerView.ViewHolder
recyclerview set item animator (1)
Estoy tratando de cambiar el campo con el tiempo en mi RecyclerView
. Cada ViewHolder
individual contiene un CardView
y algunas vistas más dentro. La única vista que quiero animar es la que tiene el tiempo. Como puedes ver, no hay animación:
adapter.notifyDataSetChanged();
La actualización de los elementos uno por uno no ayuda porque entonces todo CardView
parpadea:
int len = adapter.getItemCount();
for(int i=0;i<len;i++) {
adapter.notifyItemChanged(i);
}
¿Hay una manera de obtener una lista de todos los ViewHolders
para luego actualizar (animar) solo ese TextView
dentro de cada uno?
Puede notificar a los observadores de RecyclerView.Adapter
para emitir una actualización parcial de sus RecyclerView.ViewHolders
al pasar un Object
carga útil.
notifyItemRangeChanged(positionStart, itemCount, payload);
Donde la payload
podría ser o contener una bandera que representa el tiempo relativo o absoluto. Para enlazar la payload
a sus titulares de vista, anule el siguiente onBindViewHolder(viewHolder, position, payloads)
en su adaptador y verifique el parámetro de payloads
para los datos.
@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);
}
}
}
}
Dentro de su MyViewHolder.bindTimePayload(payload)
, actualice su TextViews
de hora al formato de hora especificado en la payload
.