2015-05-22 20 views
5

Tôi không biết tại sao hành vi này lại xảy ra, nhưng gọi notifyItemInserted(0) (chỉ ở vị trí đầu tiên) sẽ không tạo hiệu ứng cho chế độ xem. Mọi thứ hoạt động tốt ở các vị trí khác.android recyclerview notifyItemInserted animation

Animation làm việc trong trường hợp này:

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

Animation không làm việc trong trường hợp này:

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

hành vi dự kiến: Yếu tố chèn ở phía trên và chèn hình ảnh động sẽ xảy ra ở đó.

Điều gì đang xảy ra: Không có hoạt ảnh chèn nào được hiển thị, thực sự tôi nghĩ 'trực quan', yếu tố đầu tiên biến mất và di chuyển hoạt ảnh diễn ra.

Trả lời

10

hoạt ảnh sẽ diễn ra. Nhưng vị trí cũ của bạn không trở thành vị trí 1 (hiển thị trên màn hình) và vị trí mới không xuất hiện nếu bạn cuộn lên. Vì vậy, để làm cho nó có thể nhìn thấy bạn phải di chuyển recycler sau đó.

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

oh, đó là lý do tại sao các thành phần được di chuyển. Đó là một hành vi kỳ lạ, và sửa chữa của bạn nên có nguồn gốc ... Một điều cuối cùng, bất kỳ cách nào để làm recycler.scrollToPosition (0) mà không đi qua một tham chiếu trong bộ điều hợp xây dựng? –

+0

Tôi đồng ý đó là một hành vi kỳ lạ từ quan điểm của người dùng, nhưng nếu bạn tưởng tượng cách RecyclerView được mã hóa ở phía sau, nó chỉ là một hành vi hợp lý. Không phải là tôi biết, tôi thường gọi 'notify_' từ bên ngoài adapter, và để adapter chỉ là danh sách dữ liệu và mã bindView. – Budius