Sobes.tech
Junior — Middle

Jak implementovat animační efekty při aktualizaci prvků v seznamu RecyclerView?

sobes.tech AI

Odpověď od AI

Pro implementaci efektů animace při aktualizaci prvků v seznamu RecyclerView můžete použít vestavěnou třídu DefaultItemAnimator nebo vytvořit vlastní třídu, která dědí od RecyclerView.ItemAnimator.

Hlavní způsoby:

  1. Použití DefaultItemAnimator — RecyclerView již ve výchozím nastavení podporuje animace přidání, odstranění a změny prvků.

  2. Přepsání metod adaptéru s DiffUtil — při aktualizaci seznamu pomocí DiffUtil.Callback lze efektivně vypočítat změny a RecyclerView plynule animuje aktualizace.

  3. Vlastní ItemAnimator — pokud potřebujete unikátní animace, můžete vytvořit vlastní třídu, která implementuje logiku animace.

Příklad použití DiffUtil pro plynulé aktualizace:

class MyAdapter : RecyclerView.Adapter<MyViewHolder>() {
    private var items = listOf<MyItem>()

    fun updateList(newItems: List<MyItem>) {
        val diffCallback = object : DiffUtil.Callback() {
            override fun getOldListSize() = items.size
            override fun getNewListSize() = newItems.size
            override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int) =
                items[oldItemPosition].id == newItems[newItemPosition].id
            override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int) =
                items[oldItemPosition] == newItems[newItemPosition]
        }
        val diffResult = DiffUtil.calculateDiff(diffCallback)
        items = newItems
        diffResult.dispatchUpdatesTo(this)
    }
}

Tímto způsobem RecyclerView plynule animuje změny bez nutnosti ručně psát animace.