LazyColumn di Jetpack Compose — apa itu, properti dan cara kerjanya

Penulis: IT Sectr Diterbitkan: 2026-06-29 Waktu membaca: 11 mnt

LazyColumn adalah fungsi composable di Jetpack Compose untuk membuat daftar vertikal dengan pemuatan malas elemen. Tidak seperti Column, LazyColumn hanya membuat dan menyusun elemen yang terlihat di layar, menggunakannya kembali saat digulir. Menurut Google Android Documentation, 2025, LazyColumn adalah alat utama untuk menampilkan kumpulan data besar di aplikasi seluler berkat manajemen memori yang efisien.

Poin Utama

  • LazyColumn adalah daftar vertikal Jetpack Compose dengan pemuatan malas, yang hanya membuat elemen terlihat dan menggunakannya kembali saat digulir.
  • items menerima koleksi data dan fungsi pabrik untuk membuat elemen daftar, sedangkan item menambahkan komponen tunggal.
  • LazyListState melacak posisi gulir dan memungkinkan kontrol daftar secara terprogram melalui animateScrollToItem dan scrollToItem.
  • Sticky headers menempelkan judul bagian di bagian atas daftar saat digulir menggunakan stickyHeader.
  • LazyColumn mendukung berbagai tipe elemen melalui parameter contentType untuk optimalisasi penggunaan kembali.

Apa itu LazyColumn di Jetpack Compose

LazyColumn adalah fungsi composable yang mengimplementasikan daftar vertikal yang dapat digulir dengan pemuatan malas. Tidak seperti Column yang merender semua elemen turunan sekaligus, LazyColumn hanya membuat elemen yang masuk ke area tampilan.

Mekanisme pemuatan malas di LazyColumn didasarkan pada penggunaan kembali elemen: ketika elemen menjadi tersembunyi saat digulir, komposisi dan tata letaknya dapat digunakan kembali untuk elemen baru yang ditampilkan. Ini menghemat memori dan waktu prosesor, terutama pada daftar panjang.

Menurut Android Developers Blog, 2024, LazyColumn dapat memproses daftar puluhan ribu elemen secara efisien tanpa penurunan kinerja yang signifikan. Setiap elemen di LazyColumn memiliki kunci (key) yang membantu Compose mengidentifikasi dan mempertahankan status elemen saat terjadi perubahan daftar.

Tanda tangan dasar LazyColumn

LazyColumn menerima parameter modifier, state, contentPadding, reverseLayout, verticalArrangement dan horizontalAlignment. Konten ditentukan dalam blok lambda melalui fungsi DSL items dan item.

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 = "Item $item")
        }
    }
}

Parameter LazyColumn: items dan item

Blok DSL LazyColumn menyediakan fungsi items dan item untuk menambahkan konten. items menerima koleksi data, kunci dan fungsi pabrik untuk membuat elemen. item menambahkan satu elemen statis ke daftar.

itemsIndexed adalah varian items yang meneruskan indeks elemen selain data. Ini berguna ketika posisi elemen diperlukan tanpa perhitungan terpisah. items(size) hanya menerima jumlah elemen dan pabrik tanpa keterkaitan dengan koleksi.

Parameter key di items mengidentifikasi setiap elemen secara unik. Menurut Material Design Guidelines, 2025, kunci meningkatkan kinerja saat memperbarui dan menganimasi elemen, karena Compose dapat melacak perpindahan atau perubahan elemen tertentu melalui kunci.

Contoh dengan berbagai tipe elemen

Fungsi items dengan contentType memungkinkan LazyColumn mengoptimalkan penggunaan kembali elemen dari berbagai tipe. Dalam contoh di bawah, dalam satu daftar digunakan judul bagian dan baris biasa.

kotlin
@Composable
fun MixedItemsList() {
    LazyColumn {
        item {
            Text(
                text = "Judul",
                style = MaterialTheme.typography.headlineMedium
            )
        }
        items(
            items = (1..20).toList(),
            key = { it },
            contentType = { "item" }
        ) { item ->
            Text(text = "Baris $item")
        }
    }
}

LazyListState dan kontrol gulir

LazyListState adalah objek status LazyColumn yang melacak posisi gulir saat ini, elemen terlihat pertama dan offset. Ini dapat dibuat melalui rememberLazyListState() dan diteruskan ke parameter state LazyColumn.

LazyListState menyediakan metode animateScrollToItem dan scrollToItem untuk menggulir secara terprogram ke elemen tertentu. animateScrollToItem membuat animasi gulir yang halus, sedangkan scrollToItem menggulir secara instan. Kedua metode memerlukan pemanggilan di dalam coroutine dalam CompositionContext.

Menurut Android Developers, 2024, LazyListState juga berisi layoutInfo, yang memberikan informasi tentang elemen yang terlihat — indeks, offset, dan ukurannya. Ini berguna untuk mengimplementasikan analitik, pelacakan tampilan, atau gulir tak terbatas.

Contoh dengan gulir terprogram

Dalam contoh ini LazyColumn dikelola melalui LazyListState. Tombol menggulir daftar ke elemen dengan indeks 50 dengan animasi halus.

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

    Column {
        Button(
            onClick = {
                scope.launch {
                    listState.animateScrollToItem(50)
                }
            }
        ) {
            Text("Gulir ke 50")
        }

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

Optimalisasi kinerja LazyColumn

Faktor kunci kinerja LazyColumn adalah penggunaan kunci yang benar. Setiap elemen harus memiliki kunci stabil unik melalui parameter key. Tanpa kunci, Compose tidak dapat menggunakan kembali elemen dengan benar saat data berubah, yang menyebabkan rekomposisi.

contentType memberi tahu LazyColumn elemen mana yang memiliki tipe tata letak yang sama. Ketika dua elemen dengan contentType yang sama masuk ke area pemrosesan, LazyColumn dapat menggunakan kembali tata letaknya tanpa rekomposisi. Menurut Android Developers Blog, 2024, contentType meningkatkan kinerja sebesar 30–50% di daftar dengan berbagai tipe elemen.

Untuk LazyColumn juga penting untuk menghindari parameter tidak stabil di fungsi pabrik. Setiap kali parameter elemen berubah, Compose merekomposisi elemen tersebut. Menggunakan remember dan derivedStateOf untuk nilai stabil mengurangi jumlah rekomposisi.

Tabel faktor kinerja

FaktorDampakRekomendasi
Kunci (key)KunciSelalu tetapkan key stabil unik untuk items
contentTypeSignifikanTentukan tipe elemen untuk optimalisasi penggunaan kembali
Ukuran elemenSedangGunakan ukuran tetap jika memungkinkan
Daftar bersarangKritisHindari LazyColumn di dalam LazyColumn — gunakan LazyVerticalGrid

Sticky headers dan bagian di LazyColumn

stickyHeader adalah fungsi DSL LazyColumn yang menempelkan judul bagian di bagian atas daftar saat digulir. Ketika bagian berikutnya mencapai bagian atas, judulnya menggantikan yang saat ini. Perilaku ini familiar bagi pengguna dari daftar kontak dan kalender.

stickyHeader menerima kunci dan fungsi pabrik, mirip dengan item. Tidak seperti item biasa, stickyHeader tetap terlihat saat konten bagiannya digulir. Ketika bagian sepenuhnya digulir, judul bagian berikutnya mendorong yang sebelumnya.

Menurut Material Design Guidelines, 2025, sticky header meningkatkan navigasi di daftar panjang dan mengurangi beban kognitif pengguna. Untuk mengimplementasikan sticky header, cukup bungkus judul bagian dalam stickyHeader pada posisi yang benar relatif terhadap elemen items.

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))
            }
        }
    }
}

Pertanyaan yang sering diajukan

Apa perbedaan LazyColumn dengan Column di Compose?

Column merender semua elemen sekaligus dan cocok untuk daftar hingga 20–30 elemen. LazyColumn hanya membuat elemen yang terlihat dan menggunakannya kembali saat digulir, memungkinkan bekerja dengan ribuan elemen tanpa kehilangan kinerja.

Bagaimana cara menambahkan pemisah antara elemen LazyColumn?

Gunakan Arrangement.spacedBy di parameter verticalArrangement atau fungsi items dengan pemisah melalui indeks. Untuk pemisah kompleks, tambahkan item terpisah dengan Divider() di antara elemen daftar.

Bagaimana cara memperbarui LazyColumn saat data berubah?

LazyColumn secara otomatis merekomposisi saat koleksi data berubah, jika kunci stabil digunakan. Perubahan data yang terdeteksi melalui mutableStateListOf atau StateFlow menyebabkan penggambaran ulang hanya elemen yang berubah.

Bisakah LazyColumn ditempatkan di dalam LazyColumn?

Penempatan langsung LazyColumn di dalam LazyColumn tidak disarankan — keduanya memiliki gulir independen yang menciptakan konflik gestur. Sebagai gantinya, gunakan Column biasa dengan LazyColumn di dalam bagian yang dapat digulir atau LazyVerticalGrid untuk kisi.

Bagaimana cara menentukan bahwa LazyColumn telah digulir sampai akhir?

Gunakan LazyListState.layoutInfo.visibleItemsInfo dan bandingkan indeks elemen terlihat terakhir dengan jumlah total elemen. Untuk gulir tak terbatas, lacak kapan elemen terlihat terakhir mendekati akhir daftar.

Ringkasan

  • LazyColumn adalah daftar vertikal dengan pemuatan malas, membuat dan menggunakan kembali elemen hanya di area tampilan untuk kerja efisien dengan data besar.
  • items dan item adalah fungsi DSL untuk menambahkan koleksi data dan komponen tunggal di LazyColumn dengan dukungan kunci dan contentType.
  • LazyListState mengelola posisi gulir, menyediakan navigasi terprogram melalui animateScrollToItem dan scrollToItem di coroutine.
  • contentType dan key adalah alat optimalisasi kinerja utama, mengurangi rekomposisi dan meningkatkan penggunaan kembali elemen.
  • stickyHeader menempelkan judul bagian di atas daftar, meningkatkan navigasi di daftar panjang dengan pengelompokan data.
  • Arrangement.spacedBy dan contentPadding mengelola jarak antara elemen dan tepi LazyColumn untuk kesesuaian dengan Material Design.
  • Untuk daftar horizontal dengan pemuatan malas gunakan LazyRow, dan untuk kisi — LazyVerticalGrid, mengikuti prinsip pemuatan malas yang sama.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga