LazyColumn Jetpack Compose-da — bu nədir, xüsusiyyətləri və necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-06-29 Oxuma vaxtı: 11 dəq

LazyColumn Jetpack Compose-da şaquli siyahıları tənbəl yükləmə ilə yaratmaq üçün composable funksiyadır. Column-dən fərqli olaraq, LazyColumn yalnız ekranda görünən elementləri yaradır və kompozisiya edir, onları sürüşdürmə zamanı təkrar istifadə edir. Google Android Documentation, 2025-ə görə, LazyColumn yaddaşın effektiv idarə edilməsi sayəsində mobil tətbiqlərdə böyük verilən dəstlərini göstərmək üçün əsas vasitədir.

Əsas məqamlar

  • LazyColumn tənbəl yükləmə ilə Jetpack Compose şaquli siyahısıdır, yalnız görünən elementləri yaradır və sürüşdürmə zamanı onları təkrar istifadə edir.
  • items verilənlər kolleksiyasını və siyahı elementləri yaratmaq üçün fabrik funksiyasını qəbul edir, item isə tək komponentlər əlavə edir.
  • LazyListState sürüşdürmə mövqeyini izləyir və animateScrollToItem və scrollToItem vasitəsilə siyahını proqramlı şəkildə idarə etməyə imkan verir.
  • Sticky headers stickyHeader vasitəsilə sürüşdürmə zamanı bölmə başlıqlarını siyahının yuxarı hissəsində bərkidir.
  • LazyColumn təkrar istifadənin optimallaşdırılması üçün contentType parametri vasitəsilə müxtəlif element növlərini dəstəkləyir.

Jetpack Compose-da LazyColumn nədir

LazyColumn tənbəl yükləmə ilə şaquli sürüşdürülə bilən siyahını həyata keçirən composable funksiyadır. Bütün uşaq elementləri bir anda render edən Column-dən fərqli olaraq, LazyColumn yalnız görünüş sahəsinə daxil olan elementləri yaradır.

LazyColumn-da tənbəl yükləmə mexanizmi elementlərin təkrar istifadəsinə əsaslanır: element sürüşdürmə zamanı gizləndikdə, onun kompozisiyası və layoutu yeni göstərilən element üçün təkrar istifadə oluna bilər. Bu, xüsusilə uzun siyahılarda yaddaş və prosessor vaxtına qənaət edir.

Android Developers Blog, 2024-ə görə, LazyColumn performansda əhəmiyyətli azalma olmadan on minlərlə elementdən ibarət siyahıları effektiv şəkildə emal edə bilər. LazyColumn-dakı hər elementin açarı (key) var ki, bu da Compose-a siyahı dəyişiklikləri zamanı elementin vəziyyətini müəyyən etməyə və qorumağa kömək edir.

LazyColumn-un əsas imzası

LazyColumn modifier, state, contentPadding, reverseLayout, verticalArrangement və horizontalAlignment parametrlərini qəbul edir. Məzmun lambda blokunda DSL funksiyaları items və item vasitəsilə təyin edilir.

kotlin
@Composable
fun SimpleLazyColumn() {
    val itemsList = (1..100).toList()
    LazyColumn(
        modifier = Modifier.fillMaxSize(),
        verticalArrangement = Arrangement.spacedBy(8.dp),
        contentPadding = PaddingValues(16.dp)
    ) {
        items(itemsList) { item ->
            Text(text = "Element $item")
        }
    }
}

LazyColumn parametrləri: items və item

LazyColumn-un DSL bloku məzmun əlavə etmək üçün itemsitem funksiyalarını təmin edir. items verilənlər kolleksiyasını, açarı və elementləri yaratmaq üçün fabrik funksiyasını qəbul edir. item siyahıya bir statik element əlavə edir.

itemsIndexed məlumatlara əlavə olaraq elementin indeksini ötürən items variantıdır. Bu, ayrıca hesablama olmadan elementin mövqeyini bilmək tələb olunduqda faydalıdır. items(size) yalnız elementlərin sayını və kolleksiyaya bağlı olmayan fabriki qəbul edir.

items-də key parametri hər bir elementi unikal şəkildə identifikasiya edir. Material Design Guidelines, 2025-ə görə, açarlar elementlərin yenilənməsi və animasiyası zamanı performansı yaxşılaşdırır, çünki Compose açar vasitəsilə konkret elementin yerdəyişməsini və ya dəyişməsini izləyə bilər.

Müxtəlif element növləri ilə nümunə

contentType ilə items funksiyası LazyColumn-a müxtəlif növ elementlərin təkrar istifadəsini optimallaşdırmağa imkan verir. Aşağıdakı nümunədə bir siyahıda bölmə başlıqları və adi sətirlər istifadə olunur.

kotlin
@Composable
fun MixedItemsList() {
    LazyColumn {
        item {
            Text(
                text = "Başlıq",
                style = MaterialTheme.typography.headlineMedium
            )
        }
        items(
            items = (1..20).toList(),
            key = { it },
            contentType = { "item" }
        ) { item ->
            Text(text = "Sətir $item")
        }
    }
}

LazyListState və sürüşdürmə idarəsi

LazyListState cari sürüşdürmə mövqeyini, ilk görünən elementi və yerdəyişməni izləyən LazyColumn vəziyyət obyektidir. O, rememberLazyListState() vasitəsilə yaradıla və LazyColumn-un state parametrinə ötürülə bilər.

LazyListState müəyyən bir elementə proqramlı sürüşdürmə üçün animateScrollToItem və scrollToItem metodlarını təmin edir. animateScrollToItem hamar sürüşdürmə animasiyası yaradır, scrollToItem isə dərhal sürüşdürür. Hər iki metod CompositionContext daxilində korutin daxilində çağırılma tələb edir.

Android Developers, 2024-ə görə, LazyListState həmçinin görünən elementlər haqqında məlumat verən layoutInfo-nu ehtiva edir — onların indeksləri, yerdəyişmələri və ölçüləri. Bu, analitika, baxışların izlənməsi və ya sonsuz sürüşdürmə tətbiqi üçün faydalıdır.

Proqramlı sürüşdürmə ilə nümunə

Bu nümunədə LazyColumn LazyListState vasitəsilə idarə olunur. Düymə siyahını hamar animasiya ilə indeksi 50 olan elementə sürüşdürür.

kotlin
@Composable
fun ScrollableList() {
    val listState = rememberLazyListState()
    val scope = rememberCoroutineScope()

    Column {
        Button(
            onClick = {
                scope.launch {
                    listState.animateScrollToItem(50)
                }
            }
        ) {
            Text("50-yə sürüşdür")
        }

        LazyColumn(state = listState) {
            items((1..100).toList()) { item ->
                Text(
                    text = "Element $item",
                    modifier = Modifier.padding(8.dp)
                )
            }
        }
    }
}

LazyColumn performansının optimallaşdırılması

LazyColumn performansının əsas amili açarlardan düzgün istifadədir. Hər bir element key parametri vasitəsilə unikal stabil açarına malik olmalıdır. Açarlar olmadan Compose məlumat dəyişiklikləri zamanı elementləri düzgün təkrar istifadə edə bilməz, bu da yenidən kompozisiyaya səbəb olur.

contentType LazyColumn-a hansı elementlərin eyni layout növünə malik olduğunu bildirir. Eyni contentType-a malik iki element emal sahəsinə düşdükdə, LazyColumn yenidən kompozisiya olmadan onların layoutunu təkrar istifadə edə bilər. Android Developers Blog, 2024-ə görə, contentType müxtəlif element növləri olan siyahılarda performansı 30–50% yaxşılaşdırır.

LazyColumn üçün fabrik funksiyalarında qeyri-sabit parametrlərdən qaçınmaq da vacibdir. Elementin parametri hər dəfə dəyişdikdə, Compose həmin elementi yenidən kompozisiya edir. Stabil dəyərlər üçün remember və derivedStateOf istifadəsi yenidən kompozisiyaların sayını azaldır.

Performans amilləri cədvəli

AmilTəsirGöstəriş
Açarlar (key)ƏsasHəmişə items üçün unikal stabil açar təyin edin
contentTypeƏhəmiyyətliTəkrar istifadənin optimallaşdırılması üçün element növünü göstərin
Element ölçüsüOrtaMümkün olduqda sabit ölçülərdən istifadə edin
İç-içə siyahılarKritikLazyColumn içərisində LazyColumn-dən qaçının — LazyVerticalGrid istifadə edin

LazyColumn-da Sticky headers və bölmələr

stickyHeader sürüşdürmə zamanı bölmə başlığını siyahının yuxarı hissəsində bərkidən LazyColumn DSL funksiyasıdır. Növbəti bölmə yuxarıya çatdıqda, onun başlığı cari başlığı əvəz edir. Bu davranış istifadəçilərə kontakt siyahıları və təqvimlərdən tanışdır.

stickyHeader item-ə bənzər şəkildə açar və fabrik funksiyasını qəbul edir. Adi item-dən fərqli olaraq, stickyHeader öz bölməsinin məzmunu sürüşdürüldükdə görünən qalır. Bölmə tamamilə sürüşdürüldükdə, növbəti bölmənin başlığı əvvəlkini sıxışdırır.

Material Design Guidelines, 2025-ə görə, sticky header uzun siyahılarda naviqasiyanı yaxşılaşdırır və istifadəçinin idrak yükünü azaldır. Sticky header tətbiq etmək üçün bölmə başlığını items elementlərinə nisbətən düzgün mövqedə stickyHeader ilə əhatələmək kifayətdir.

kotlin
@Composable
fun SectionedList(sections: Map<String, List<String>>) {
    LazyColumn {
        sections.forEach { (header, items) ->
            stickyHeader {
                Text(
                    text = header,
                    modifier = Modifier.background(Color.White)
                        .padding(16.dp)
                )
            }
            items(items) { item ->
                Text(text = item, modifier = Modifier.padding(8.dp))
            }
        }
    }
}

Tez-tez verilən suallar

LazyColumn Compose-da Column-dən nə ilə fərqlənir?

Column bütün elementləri bir anda render edir və 20–30 elementə qədər siyahılar üçün uyğundur. LazyColumn yalnız görünən elementləri yaradır və sürüşdürmə zamanı onları təkrar istifadə edir ki, bu da performans itkisi olmadan minlərlə elementlə işləməyə imkan verir.

LazyColumn elementləri arasında ayırıcıları necə əlavə etmək olar?

verticalArrangement parametrində Arrangement.spacedBy istifadə edin və ya indeks vasitəsilə ayırıcı ilə items funksiyalarından istifadə edin. Mürəkkəb ayırıcılar üçün siyahı elementləri arasında Divider() ilə ayrıca item əlavə edin.

Məlumat dəyişdikdə LazyColumn-u necə yeniləmək olar?

LazyColumn stabil açarlardan istifadə edildikdə məlumat kolleksiyası dəyişdikdə avtomatik olaraq yenidən kompozisiya olunur. mutableStateListOf və ya StateFlow vasitəsilə aşkar edilən məlumat dəyişiklikləri yalnız dəyişmiş elementlərin yenidən çəkilməsinə səbəb olur.

LazyColumn-u LazyColumn-un içərisinə yerləşdirmək olarmı?

LazyColumn-un LazyColumn daxilinə birbaşa yerləşdirilməsi tövsiyə edilmir — hər ikisinin müstəqil sürüşdürməsi var ki, bu da jest konflikti yaradır. Bunun əvəzinə sürüşdürülə bilən bölmə daxilində LazyColumn ilə adi Column və ya şəbəkələr üçün LazyVerticalGrid istifadə edin.

LazyColumn-un sona qədər sürüşdürüldüyünü necə müəyyən etmək olar?

LazyListState.layoutInfo.visibleItemsInfo istifadə edin və son görünən elementin indeksini elementlərin ümumi sayı ilə müqayisə edin. Sonsuz sürüşdürmə üçün son görünən elementin siyahının sonuna yaxınlaşdığını izləyin.

Nəticə

  • LazyColumn tənbəl yükləmə ilə şaquli siyahıdır, böyük verilənlərlə effektiv iş üçün elementləri yalnız görünüş sahəsində yaradır və təkrar istifadə edir.
  • itemsitem LazyColumn-da açarlar və contentType dəstəyi ilə verilənlər kolleksiyaları və tək komponentlər əlavə etmək üçün DSL funksiyalarıdır.
  • LazyListState sürüşdürmə mövqeyini idarə edir, korutinlərdə animateScrollToItem və scrollToItem vasitəsilə proqramlı naviqasiyanı təmin edir.
  • contentTypekey performans optimallaşdırmasının əsas vasitələridir, yenidən kompozisiyanı azaldır və elementlərin təkrar istifadəsini yaxşılaşdırır.
  • stickyHeader bölmə başlıqlarını siyahının yuxarı hissəsində bərkidir, verilənlərin qruplaşdırılması ilə uzun siyahılarda naviqasiyanı yaxşılaşdırır.
  • Arrangement.spacedBy və contentPadding Material Design-a uyğunluq üçün elementlər və LazyColumn kənarları arasında boşluqları idarə edir.
  • Üfüqi siyahılar üçün LazyRow, şəbəkələr üçün isə eyni tənbəl yükləmə prinsipi ilə LazyVerticalGrid istifadə edin.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun