2015-05-22 3 views
5

Ich weiß nicht, warum dieses Verhalten passiert, aber Aufruf notifyItemInserted(0) (erste Position) wird nicht die Ansicht animieren. An anderen Positionen funktioniert alles gut.android recyclerview notifyItemInserted Animation

Animation in diesem Fall arbeiten:

friendsList.remove(positionFriend); 
friendsList.add(1, newFriend); 
notifyItemInserted(1); 
notifyItemRemoved(positionFriend+1); 

Animation, in diesem Fall nicht funktioniert:

friendsList.remove(positionFriend); 
friendsList.add(0, newFriend); 
notifyItemInserted(0); 
notifyItemRemoved(positionFriend+1); 

Erwartetes Verhalten: Element an der Oberseite eingeführt und Animation einfügen dort geschieht.

Was passiert: Keine Insert-Animation wird angezeigt, eigentlich denke ich 'visuell', erstes Element verschwindet und Bewegung Animation passiert.

Antwort

10

die Animation passiert. Aber Ihre alte Position Null wird Position 1 (sichtbar auf dem Bildschirm) und die neue Position Null erscheint, wenn Sie nach oben scrollen. Um es sichtbar zu machen, müssen Sie danach den Recycler scrollen.

friendsList.remove(positionFriend); 
friendsList.add(0, newFriend); 
notifyItemInserted(0); 
notifyItemRemoved(positionFriend+1); 
recycler.scrollToPosition(0); 
+0

oh, deshalb werden die Elemente verschoben. Es ist ein merkwürdiges Verhalten, und Ihre Behebung sollte nativ sein ... Eine letzte Sache, irgendeine Weise recycler.scrollToPosition (0) zu tun, ohne eine Referenz im Adapterkonstruktor zu übergeben? –

+0

Ich stimme zu, dass es aus Benutzersicht ein komisches Verhalten ist, aber wenn man sich vorstellt, wie der RecyclerView im Hintergrund codiert ist, ist es nur ein logisches Verhalten. Nicht dass ich mir dessen bewusst bin, ich nenne normalerweise 'notify_' von außerhalb des Adapters und lasse den Adapter nur die Datenliste und den BindView-Code sein. – Budius