2015-05-22 20 views
5

Nie wiem, dlaczego to zachowanie się dzieje, ale wywołanie notifyItemInserted(0) (tylko pierwsza pozycja) nie będzie animować widoku. Wszystko działa dobrze na innych pozycjach.Android recyclerview notifyItemInserted animation

Animacja działa w tym przypadku:

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

Animacja nie działa w tym przypadku:

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

oczekiwane zachowanie: Element wstawiany na wierzchu i wstawić animację tam się dzieje.

Co się dzieje: brak animacji wstawiania, właściwie myślę, że "wizualnie", pierwszy element znika i następuje ruch animacji.

Odpowiedz

10

Animacja się dzieje. Ale twoja stara pozycja zerowa staje się pozycją 1 (widoczną na ekranie), a nowa pozycja zerowa pojawia się, gdy przewiniesz w górę. Aby było to widoczne, musisz później przewinąć recykler.

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

oh, to dlatego elementy są przenoszone. To dziwne zachowanie, a twoja poprawka powinna być natywna ... Ostatnia rzecz, jakikolwiek sposób zrobić recycler.scrollToPosition (0) bez przekazywania referencji w konstruktorze adapterów? –

+0

Zgadzam się, że to dziwne zachowanie z punktu widzenia użytkownika, ale jeśli wyobrażałeś sobie, jak RecyclerView jest kodowany z tyłu, to tylko logiczne zachowanie. Nie o tym wiem, zwykle nazywam 'notify_' spoza adaptera, i niech adapter będzie po prostu listą danych i kodem bindView. – Budius