Sobes.tech
Junior

Mi a ViewHolder minta lényege?

sobes.tech MI

Válasz az MI-től

A ViewHolder egy segédosztály az Androidban, amely az adapteren belüli View-elemek hivatkozásainak gyorsítótárazására szolgál.

A minta lényege:

  1. Gyorsítótárazás: Minden alkalommal, amikor egy listaelemet létrehozunk vagy újra felhasználunk, a findViewById() hívás helyett a ViewHolder egyszer megtalálja és tárolja a View hivatkozásokat.
  2. Újrahasználat: A lista görgetése közben az Android újra felhasználja a már létrehozott View objektumokat, ezzel takarítva meg memóriát és erőforrásokat. A hozzá kötött ViewHolder gyors hozzáférést biztosít az alárendelt elemekhez.
  3. Teljesítmény: Csökkenti a findViewById() hívások számát, ezáltal jelentősen gyorsítva a listák renderelését (pl. RecyclerView, ListView).

Példa a RecyclerView.Adapter-ben:

class MyAdapter(...) : RecyclerView.Adapter<MyAdapter.MyViewHolder>() {

    inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val textView: TextView = itemView.findViewById(R.id.my_text_view)
        val imageView: ImageView = itemView.findViewById(R.id.my_image_view)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.list_item_layout, parent, false)
        return MyViewHolder(view) // Egyszeri ViewHolder létrehozás
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        // A gyorsítótárazott hivatkozások használata az adatok frissítéséhez
        holder.textView.text = "Item ${position}"
        // holder.imageView.setImage...
    }

    // ... egyéb metódusok
}