Middle
Jetpack Compose'tо RecyclerView кантип түзүү керек?
sobes.tech AI
AIден жооп
Jetpack Compose-да RecyclerView жок салттуу мааниде. Тизмелерди көрсөтүү үчүн LazyColumn (вертикалдык тизмелер үчүн) жана LazyRow (горизонталдык тизмелер үчүн) колдонулат. Алар элементтерди кайра колдонуу аркылуу окшош эффективтикти камсыздайт.
LazyColumn колдонуу мисалы:
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)
}
}
}
Түшүндүрмө:
LazyColumn: Композируемая функция, ал вертикалдык тизмеде элементтерди көрсөтөт, аларды керектүү учурда түзөт.items(itemsList) { item -> ... }:LazyListScopeүчүн кеңейтүү, алitemsListтизмесинде өтүп, ар бир элемент үчүн (item) берилгенComposableламбда блокту чакырат. Бул блокто ар бир тизмектин көрүнүшү аныкталат.Text(text = item): Жөнөкөй балдар компоненти, ал учурдагы элементтин текстин көрсөтөт.
LazyColumn/LazyRow негизги өзгөчөлүктөрү:
- Эффективдүүлүк: Элементтер гана көрүнүктүү болгондо же жакын жерде болсо түзүлөт жана композируется. Бул эс тутумду азайтат жана чоң тизмелер үчүн иштөө жөндөмүн жакшыртат.
- Жөнөкөлүк: RecyclerViewге салыштырмалуу API, ал адаптер, ViewHolder түзүүнү жана алардын жашоо циклин башкарууну талап кылбайт.
- Компонентке биринчи орун берүү: башка Compose функциялары менен толук интеграцияланган.
itemsIndexed колдонуп, ар бир элементтин индексине жетүүгө болот:
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 = "Item at index $index: $item")
}
}
}
Көбүрөөк татаал жүрүм-турум үчүн (мисалы, ар кандай көрүнүштөрдүн түрлөрү), items же item жүктөөлөрүн колдонсо болот:
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 -> {
// Мында сүрөт көрсөтө аласыз, мисалы, Image функциясы аркылуу
Text(text = "Image: ${item.url}") // Алмаштыруу
}
}
}
}
}