Middle
Jetpack Compose'ta nasıl bir RecyclerView oluşturulur?
sobes.tech yapay zeka
AI'dan gelen yanıt
Jetpack Compose'ta geleneksel anlamda bir RecyclerView yoktur. Listeleri göstermek için LazyColumn (dikey listeler için) ve LazyRow (yatay listeler için) kullanılır. Bunlar, öğelerin yeniden kullanımı sayesinde benzer verimlilik sağlar.
LazyColumn kullanım örneği:
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)
}
}
}
Analiz:
LazyColumn: Gerektiğinde öğeleri oluşturarak dikey listede öğeleri gösteren bir fonksiyon.items(itemsList) { item -> ... }:LazyListScopeiçin genişletme olup, veri listesinin (itemsList) üzerinde yineleme yapmaya ve her öğe (item) için sağlananComposablelambda'yı çağırmaya olanak tanır. Bu blok, listenin her öğesinin nasıl görüneceğini tanımlar.Text(text = item): Mevcut listenin öğesinin metnini gösteren basit bir composable fonksiyon.
LazyColumn/LazyRow'un temel özellikleri:
- Verimlilik: Öğeler, yalnızca görünür hale geldiğinde veya kenara yakın olduğunda oluşturulur ve derlenir. Bu, büyük listelerde bellek kullanımını azaltır ve performansı artırır.
- Basitlik: RecyclerView'e kıyasla API daha basittir, adaptör, ViewHolder veya yaşam döngüsü yönetimi gerekmez.
- Tam entegrasyon: Diğer Compose fonksiyonlarıyla sorunsuz çalışır.
Her öğenin indeksine erişmek için itemsIndexed kullanılabilir:
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 indeks $index: $item")
}
}
}
Daha karmaşık davranışlar (örneğin, farklı görünüm türleri) için items veya item aşırı yüklemeleri kullanılabilir:
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 bir resim gösterebilirsiniz, örneğin Image fonksiyonu ile
Text(text = "Resim: ${item.url}") // Yer tutucu
}
}
}
}
}