Как сохранить анимации во ViewHolder но при этом избежать уничтожения ViewHolder

«Как сохранить анимации во ViewHolder но при этом избежать уничтожения ViewHolder» — вопрос из категории UI и Views, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Используйте setHasStableIds(true) в адаптере и переопределите getItemId(), чтобы возвращать уникальные ID для элементов. Это предотвратит пересоздание ViewHolder при обновлении данных.

Также сохраняйте состояние анимации в самом ViewHolder:

class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    private var isAnimating = false

    fun bind(item: Item) {
        if (isAnimating) {
            // Восстановить анимацию
            itemView.animate().cancel()
            itemView.rotation = 90f
        } else {
            // Новая анимация
            itemView.animate().rotation(90f).setListener {
                isAnimating = false
            }
            isAnimating = true
        }
    }
}

В адаптере:

override fun getItemId(position: Int): Long {
    return items[position].id // Уникальный ID
}