2017-01-10 5 views
0

Я создал RecyclerView с GridManagerLayout.Recycler просмотреть товары по категориям

Для простоты мои карты имеют 2 размера, их идентификатор и их редкость. Я хотел бы иметь кнопку, которая устраивает карты в сетке либо их идентификатором, либо их редкостью. Каким образом я должен заниматься этим, чтобы я мог анимировать карты, двигаясь на их новые позиции?

Я попытался создать новый ArrayList при нажатии кнопки, а затем notifydDatasetChanged(). Элементы переключают позиции в порядке, но нет анимации, т. Е. Карты просто повторно заселены, а не имеют «перемещение» к новому эффекту позиции. Я предполагаю, что это так, так как я определяю новый ArrayList вместо изменения текущего списка.

Я прочитал еще одно сообщение, в котором говорится, что я должен использовать Collections.swap, чтобы сделать это. Не уверен, что это то, что я должен преследовать.

Любые советы?

ответ

0

У меня есть одно возможное решение для вас!

Напишите этот метод внутри адаптера RecyclerView.

public void addItemList(List<JobListApi.Job> newlyCreatedList) { 
    int lastPosition = this.mainItemList.size(); 
    this.mainItemList.addAll(newlyCreatedList); 
    this.notifyItemRangeInserted(lastPosition, newlyCreatedList.size()); 
} 

Теперь вызовите этот метод только что созданным ArrayList.

Надеюсь, это сработает для вас.

+0

Я не пробовал это, а просто смотрел на него, добавляется ли это поверх предыдущего массива? Разве это не дублирует элементы в моем первоначальном списке? –

+0

@ImranHamid Да, действительно! Но вы можете очистить оригинал перед добавлением нового списка. Я просто пытался решить вашу проблему с анимацией. –

+0

Спасибо за помощь! Я понял, что использование 'notifyItemMoved()' выполняет анимацию перемещения позиции при использовании 'Collections.swap'. –

0

Мне удалось решить эту проблему. Если кому-то нужен ответ, пожалуйста, используйте notifyItemMoved(), а затем notifyItemRangeChanged(position,getItemCount)