Sobes.tech
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: გამარტივებული 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}") // გამოტოვება
                }
            }
        }
    }
}