Ответ
Используйте 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
}