Он побеждает ListAdapter цель автоматического расчета и анимации изменений списка при последовательном вызове этих строк:
submitList(null);
submitList(orderChangedList);
То есть вы только очистили (null
) ListAdaptercurrentList и затем представил (.submitList()
) новый список.Таким образом, соответствующая анимация в этом случае не будет видна, а будет только обновление всего RecyclerView.
Решение заключается в реализации метода .submitList( List<T> list)
внутри ListAdapter следующим образом:
public void submitList(@Nullable List<T> list) {
mDiffer.submitList(list != null ? new ArrayList<>(list) : null);
}
Таким образом, вы позволяете ListAdapter сохранять свой currentList и «расставлять» его с newList, тем самым вычисляя анимацию, в отличие от «diffing» с null
.
Примечание: Однако анимация обновления не произойдет, если, конечно, newList содержит те же элементы в том же порядке, что и originalList.