2014-12-05 5 views
0

Я реализовал RecyclerView и CardView в новом приложении, где я использовал ListView в пре-L раз. Когда я прибегую к сборнику, скажите:Анимация RecyclerView элементов при использовании базовой коллекции

Это прекрасно работает, но мне нужны анимации, показывающие пользователю эти изменения.

Есть ли простой способ сделать это? Если нет, можете ли вы указать мне правильный способ сделать это?

ответ

1

Если у вас есть стабильные идентификаторы, вы можете запустить:

Collections.reverse(items); 
adapter.notifyDataSetChanged(); 

, который даст вам "некоторые" анимации. Вы можете сделать это для более эффективной и реалистичной анимации:

Collections.reverse(items); 
final int end = items.size() - 1; 
for (int i = 0; i < end; i ++) { 
    adapter.notifyItemMoved(0, end - i); 
} 

Не проверял код, но должен быть правильным. В принципе, для каждого элемента, кроме последнего, вы отправляете событие перемещения для первого элемента в конец списка. Обратите внимание, что первый параметр всегда 0, потому что RecyclerView знает, что когда первый элемент перемещается в конец списка, следующий элемент является первым и так далее.

Это будет иметь такой же эффект, что и ручное реверс.

0

Попробуйте переделать коллекцию по одному пункту за раз и вызовите один из этих методов в вашем RecyclerView.Adapter для каждого элемента.

final void notifyItemInserted(int position) 
final void notifyItemMoved(int fromPosition, int toPosition) //I guess this one? 
final void notifyItemRangeChanged(int positionStart, int itemCount)changed. 
final void notifyItemRangeInserted(int positionStart, int itemCount) 
final void notifyItemRangeRemoved(int positionStart, int itemCount) 
final void notifyItemRemoved(int position) 
Смежные вопросы