Mise à jour partielle de RecyclerView.ViewHolder

J'essaie de changer le champ avec le temps dans mon RecyclerView . Chaque ViewHolder individuel contient un CardView et quelques autres vues à l'intérieur. La seule vue que je veux animer est celle avec le temps. Comme vous pouvez le voir, il n'y a pas d'animation:

 adapter.notifyDataSetChanged(); 

RecyclerView sans animations

La mise à jour des éléments un par un ne contribue pas, car alors, l'intégralité de CardView clignote:

 int len = adapter.getItemCount(); for(int i=0;i<len;i++) { adapter.notifyItemChanged(i); } 

Entrez la description de l'image ici

Existe-t-il un moyen d'obtenir une liste de tous les ViewHolders pour mettre à jour (animer) juste ce TextView à l'intérieur de chacun d'eux?

One Solution collect form web for “Mise à jour partielle de RecyclerView.ViewHolder”

Vous pouvez notifier vos observateurs RecyclerView.Adapter pour publier une mise à jour partielle de votre RecyclerView.ViewHolders en passant un Object Payload.

 notifyItemRangeChanged(positionStart, itemCount, payload); 

Lorsque la payload peut être ou contenir un drapeau qui représente un temps relatif ou absolu. Pour lier la payload à vos titulaires de vue, remplacer la onBindViewHolder(viewHolder, position, payloads) suivante onBindViewHolder(viewHolder, position, payloads) dans votre carte et vérifier le paramètre de payloads pour les données.

 @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); } } } } 

Dans votre MyViewHolder.bindTimePayload(payload) , mettez à jour vos TextViews au format d'heure spécifié dans la payload .

coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.