Sobes.tech
Middle

Jetpack Compose-də RecyclerView necə yaradılır?

sobes.tech Süni İntellekt

AI-dan cavab

Jetpack Compose-də ənənəvi mənada RecyclerView yoxdur. Siyahıları göstərmək üçün LazyColumn (şaquli siyahılar üçün) və LazyRow ( üfüqi siyahılar üçün) istifadə olunur. Onlar elementlərin təkrar istifadəsi sayəsində oxşar səmərəliliyi təmin edir.

LazyColumn-un istifadəsinə nümunə:

import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.Text
import androidx.compose.runtime.Composable

@Composable
fun SimpleList(itemsList: List<String>) {
    LazyColumn {
        items(itemsList) { item ->
            Text(text = item)
        }
    }
}

Təhlil:

  • LazyColumn: Gərəkli olduqda elementləri yaradan və vertikal siyahıda göstərən composable funksiyası.
  • items(itemsList) { item -> ... }: LazyListScope üçün genişlənmə, bu siyahı boyunca iterasiya etməyə və hər element üçün (item) təqdim olunan Composable lambda-ı çağırmağa imkan verir. Bu blok hər elementin necə görünəcəyini müəyyən edir.
  • Text(text = item): Cari elementin mətnini göstərən sadə composable funksiyası.

LazyColumn/LazyRow-un əsas xüsusiyyətləri:

  • Səmərəlilik: Elementlər yalnız görünən və ya kənara yaxın olduqda yaradılır və tərkibinə daxil olur. Bu, yaddaş istifadəsini azaldır və böyük siyahılar üçün performansı yaxşılaşdırır.
  • Sadəlik: API RecyclerView ilə müqayisədə sadələşdirilmişdir, adapter, ViewHolder və ya bu komponentlərin həyat dövrü idarəçiliyi tələb olunmur.
  • Tam inteqrasiya: Digər Compose funksiyaları ilə tam uyğunlaşır.

Hər elementin indeksinə daxil olmaq üçün itemsIndexed istifadə edilə bilər:

import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material.Text
import androidx.compose.runtime.Composable

@Composable
fun IndexedList(itemsList: List<String>) {
    LazyColumn {
        itemsIndexed(itemsList) { index, item ->
            Text(text = "İtem indeksdə $index: $item")
        }
    }
}

Daha mürəkkəb davranışlar üçün (məsələn, müxtəlif görünüş tipləri), items və ya item overload-lərindən istifadə etmək olar:

import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.Text
import androidx.compose.runtime.Composable

sealed class ListItem {
    data class TextItem(val content: String) : ListItem()
    data class ImageItem(val url: String) : ListItem()
}

@Composable
fun MixedList(itemsList: List<ListItem>) {
    LazyColumn {
        items(itemsList) { item ->
            when (item) {
                is ListItem.TextItem -> Text(text = item.content)
                is ListItem.ImageItem -> {
                    // Burada şəkil göstərə bilərsiniz, məsələn, Image funksiyası ilə
                    Text(text = "Şəkil: ${item.url}") // Yerləşdirici
                }
            }
        }
    }
}