2016-04-30 25 views
17

Ich versuche, das Feld mit der Zeit in meinem RecyclerView zu ändern. Jede Person ViewHolder enthält eine CardView und ein paar mehr Ansichten im Inneren. Die einzige Ansicht, die ich animieren möchte, ist die mit der Zeit. Wie Sie sehen können, gibt es keine Animation:Teilweise Aktualisierung von RecyclerView.ViewHolder

adapter.notifyDataSetChanged(); 

RecyclerView with no animations

aktualisiert Elemente nacheinander hilft nicht, weil dann die ganze CardView blinkt:

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

enter image description here

Gibt es eine Möglichkeit, eine Liste aller ViewHolders zu erhalten, um dann nur diesezu aktualisieren (zu animieren)in jedem?

+1

Sie müssen Artikel Animator hinzufügen –

Antwort

35

Sie können Ihre Beobachter RecyclerView.Adapter benachrichtigen, um eine teilweise Aktualisierung Ihrer RecyclerView.ViewHolders durch die Weitergabe einer Nutzlast Object.

notifyItemRangeChanged(positionStart, itemCount, payload); 

Wo payload sein könnte oder ein Flag enthalten, die relative oder absolute Zeit darstellt. Um die payload an Ihre Ansichtshalter zu binden, überschreiben Sie die folgende Methode onBindViewHolder(viewHolder, position, payloads) in Ihrem Adapter und überprüfen Sie den Parameter payloads für Daten.

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

Innerhalb Ihrer MyViewHolder.bindTimePayload(payload) Methode, Ihre Zeit TextViews das Zeitformates in den payload angegeben aktualisieren.

+1

Funktioniert wunderbar. Vielen Dank. – PhpXp

+0

Bruder, du hast den Tag gerettet, hast wie ein Zauber gearbeitet, ich war dabei, die Recycler-Ansicht auf Viewpager zu ändern. Aber du hast mich auch dazu gebracht zu lernen und meine vielen Stunden harter Arbeit zu retten –

Verwandte Themen