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 olunanComposablelambda-ı ç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
}
}
}
}
}