wasabeef recyclerview recycler itemanimator item best animators animations android animation android-recyclerview

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 .