Middle
Jetpack Compose'da RecyclerView qanday yaratish mumkin?
sobes.tech AI
AIdan javob
Jetpack Compose'da an'anaviy tushunishda RecyclerView mavjud emas. Ro'yxatlarni ko'rsatish uchun LazyColumn (vertikal ro'yxatlar uchun) va LazyRow (gorizontal ro'yxatlar uchun) ishlatiladi. Ular elementlarni qayta ishlatish orqali o'xshash samaradorlikni ta'minlaydi.
LazyColumn dan foydalanish misoli:
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)
}
}
}
Tahlil:
LazyColumn: Kerak bo'lsa, elementlarni yaratib, vertikal ro'yxatda ko'rsatadigan composable funktsiya.items(itemsList) { item -> ... }:LazyListScopeuchun kengaytirish bo'lib, ma'lumotlar ro'yxati (itemsList) bo'ylab iteratsiya qilish va har bir element (item) uchun berilganComposablelambda-ni chaqirish imkonini beradi. Bu blok har bir ro'yxat elementining qanday ko'rinishini belgilaydi.Text(text = item): Hozirgi ro'yxat elementining matnini ko'rsatadigan oddiy composable funktsiya.
LazyColumn/LazyRow ning asosiy xususiyatlari:
- Samaradorlik: Elementlar faqat ko'rinadigan bo'lsa yoki chetga yaqin bo'lsa, yaratiladi va birlashtiriladi. Bu katta ro'yxatlar uchun xotira iste'molini kamaytiradi va ishlashni yaxshilaydi.
- Soddalik: API RecyclerView ga nisbatan soddaroq, adapter, ViewHolder yoki bu komponentlarning hayot aylanishini boshqarish shart emas.
- To'liq integratsiya: Boshqa Compose funksiyalari bilan mukammal ishlaydi.
Har bir elementning indeksiga kirish uchun itemsIndexed dan foydalanish mumkin:
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 = "Indeksda $index element: $item")
}
}
}
Ko'proq murakkab xatti-harakatlar uchun (masalan, turli ko'rinish turlari), items yoki item overload'larini ishlatish mumkin:
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 -> {
// Bu yerda rasm ko'rsatish mumkin, masalan Image funktsiyasi bilan
Text(text = "Rasm: ${item.url}") // Zaxira
}
}
}
}
}