Sobes.tech
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}") // Алмаштыруу
                }
            }
        }
    }
}