Я использую RecyclerView
с данными из SortedList
с использованием SortedListAdapterCallback
. Я хочу отключить анимацию для событий onChange
, но сохраните их для onInserted
/onRemoved
/onMoved
. Я попытался позвонить setSupportsChangeAnimations(false)
на DefaultItemAnimator
, используемом RecyclerView
, но анимация все же появляется. Если я звоню setItemAnimator(null)
все анимации успешно удаляются, как ожидалось.Отключить анимацию анимации на ItemAnimator для RecyclerView
Я попытался, глядя на реализации, и кажется, если supportsChangeAnimations
является true
, то RecyclerView
будет анимировать событие изменения, сохраняя старую viewHolder и Затенение его к новому viewHolder. Я не хочу этого. Если supportsChangeAnimations
- false
, старый и новый viewHolders, однако, будут тем же самым объектом, и вместо этого будет анимация onMoved
с x на x (то есть фактическое перемещение). Это, однако, означает, что элемент получит раздражающий эффект отскока. Я тоже этого не хочу, я не хочу анимации вообще. :(
От DefaultItemAnimator.java:
@Override
public boolean animateChange(ViewHolder oldHolder, ViewHolder newHolder,
int fromX, int fromY, int toX, int toY) {
if (oldHolder == newHolder) {
// Don't know how to run change animations when the same view holder is re-used.
// run a move animation to handle position changes.
return animateMove(oldHolder, fromX, fromY, toX, toY);
}
...
Иногда, когда я загрузить мой список, я асинхронно загрузить некоторые данные и элементы обновления 1-3 раза, и это выглядит действительно дерьмовый, когда он отскакивает и мерцает каждый раз.
Как я эффективно полностью отключить onChange
анимации, не прибегая к написанию полностью настраиваемая ItemAnimator
хорошо, это может сработать, однако вопрос был связан строго отключить только OnChange и сохраняя другие анимации – cjurjiu