Middle
Чӣ гуна сохтани RecyclerView дар Jetpack Compose?
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:
- Эфектыўнасць: Элементы ствараюцца і кампазіруюцца толькі тады, калі яны становяцца бачнымі на экране або знаходзяцца блізка да краю. Гэта зніжае спажыванне памяці і паляпшае прадукцыйнасць для вялікіх спісаў.
- Прастата: Спрошчаны API у параўнанні з RecyclerView, які не патрабуе стварэння адаптара, 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}") // Заглушка
}
}
}
}
}