LazyColumn in Jetpack Compose — wat het is, eigenschappen en hoe het werkt

Auteur: IT Sectr Gepubliceerd: 2026-06-29 Leestijd: 11 min

LazyColumn is een composable-functie in Jetpack Compose voor het maken van verticale lijsten met lazy loading van elementen. In tegenstelling tot Column, maakt LazyColumn alleen de zichtbare elementen op het scherm aan en componeert deze, waarbij ze opnieuw worden gebruikt tijdens het scrollen. Volgens Google Android Documentation, 2025 is LazyColumn het belangrijkste hulpmiddel voor het weergeven van grote datasets in mobiele applicaties dankzij efficiënt geheugenbeheer.

Belangrijkste punten

  • LazyColumn is een verticale Jetpack Compose-lijst met lazy loading die alleen zichtbare elementen maakt en ze hergebruikt tijdens het scrollen.
  • items accepteert een gegevenscollectie en een fabrieksfunctie voor het maken van lijstelementen, terwijl item afzonderlijke componenten toevoegt.
  • LazyListState houdt de scrollpositie bij en maakt programmatisch beheer van de lijst mogelijk via animateScrollToItem en scrollToItem.
  • Sticky headers maken sectiekopteksten vast aan de bovenkant van de lijst tijdens het scrollen met behulp van stickyHeader.
  • LazyColumn ondersteunt verschillende elementtypen via de parameter contentType voor optimalisatie van hergebruik.

Wat is LazyColumn in Jetpack Compose

LazyColumn is een composable-functie die een verticale scrollbare lijst met lazy loading implementeert. In tegenstelling tot Column, die alle onderliggende elementen in één keer rendert, maakt LazyColumn alleen elementen aan die in het weergavegebied vallen.

Het lazy loading-mechanisme in LazyColumn is gebaseerd op hergebruik van elementen: wanneer een element tijdens het scrollen verborgen raakt, kunnen de compositie en lay-out ervan opnieuw worden gebruikt voor een nieuw weergegeven element. Dit bespaart geheugen en processortijd, vooral bij lange lijsten.

Volgens Android Developers Blog, 2024 kan LazyColumn lijsten van tienduizenden elementen efficiënt verwerken zonder significant prestatieverlies. Elk element in LazyColumn heeft een sleutel (key) die Compose helpt het element te identificeren en de status ervan te behouden bij wijzigingen in de lijst.

Basis handtekening van LazyColumn

LazyColumn accepteert de parameters modifier, state, contentPadding, reverseLayout, verticalArrangement en horizontalAlignment. De inhoud wordt gespecificeerd in een lambda-blok via de DSL-functies items en 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")
        }
    }
}

Parameters van LazyColumn: items en item

Het DSL-blok van LazyColumn biedt de functies items en item voor het toevoegen van inhoud. items accepteert een gegevenscollectie, een sleutel en een fabrieksfunctie voor het maken van elementen. item voegt een enkel statisch element toe aan de lijst.

itemsIndexed is een variant van items die naast de gegevens ook de index van het element doorgeeft. Dit is handig wanneer de positie van het element nodig is zonder afzonderlijke berekening. items(size) accepteert alleen het aantal elementen en de fabriek zonder koppeling aan een collectie.

De parameter key in items identificeert elk element uniek. Volgens Material Design Guidelines, 2025 verbeteren sleutels de prestaties bij het bijwerken en animeren van elementen, omdat Compose de verplaatsing of wijziging van een specifiek element via de sleutel kan volgen.

Voorbeeld met verschillende elementtypen

De functie items met contentType stelt LazyColumn in staat om het hergebruik van elementen van verschillende typen te optimaliseren. In het onderstaande voorbeeld worden in één lijst sectiekopteksten en gewone rijen gebruikt.

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

LazyListState en scrollbeheer

LazyListState is een statusobject van LazyColumn dat de huidige scrollpositie, het eerste zichtbare element en de offset bijhoudt. Het kan worden gemaakt via rememberLazyListState() en worden doorgegeven aan de parameter state van LazyColumn.

LazyListState biedt de methoden animateScrollToItem en scrollToItem voor programmatisch scrollen naar een specifiek element. animateScrollToItem creëert een vloeiende scrollanimatie, terwijl scrollToItem onmiddellijk scrollt. Beide methoden moeten worden aangeroepen binnen een coroutine in CompositionContext.

Volgens Android Developers, 2024 bevat LazyListState ook layoutInfo, dat informatie geeft over zichtbare elementen — hun indexen, offsets en afmetingen. Dit is nuttig voor het implementeren van analyses, het bijhouden van weergaven of oneindig scrollen.

Voorbeeld met programmatisch scrollen

In dit voorbeeld wordt LazyColumn beheerd via LazyListState. Een knop scrollt de lijst naar het element met index 50 met een vloeiende animatie.

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

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

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

Prestatie-optimalisatie van LazyColumn

De belangrijkste factor voor de prestaties van LazyColumn is het correct gebruiken van sleutels. Elk element moet een unieke stabiele sleutel hebben via de parameter key. Zonder sleutels kan Compose elementen niet correct hergebruiken bij gegevenswijzigingen, wat leidt tot recompositie.

contentType informeert LazyColumn welke elementen hetzelfde lay-outtype hebben. Wanneer twee elementen met dezelfde contentType in het verwerkingsgebied komen, kan LazyColumn hun lay-out hergebruiken zonder recompositie. Volgens Android Developers Blog, 2024 verbetert contentType de prestaties met 30–50% in lijsten met verschillende elementtypen.

Voor LazyColumn is het ook belangrijk om instabiele parameters in fabrieksfuncties te vermijden. Elke keer dat een parameter van een element verandert, recomposeert Compose dat element. Het gebruik van remember en derivedStateOf voor stabiele waarden vermindert het aantal recomposities.

Tabel met prestatie factoren

FactorImpactAanbeveling
Sleutels (key)EssentieelStel altijd een unieke stabiele key in voor items
contentTypeAanzienlijkGeef het elementtype op voor optimalisatie van hergebruik
ElementgrootteGemiddeldGebruik waar mogelijk vaste afmetingen
Geneste lijstenKritiekVermijd LazyColumn in LazyColumn — gebruik LazyVerticalGrid

Sticky headers en secties in LazyColumn

stickyHeader is een DSL-functie van LazyColumn die de sectiekoptekst aan de bovenkant van de lijst vastzet tijdens het scrollen. Wanneer de volgende sectie de bovenkant bereikt, vervangt de koptekst de huidige. Dit gedrag is gebruikers bekend van contactlijsten en kalenders.

stickyHeader accepteert een sleutel en een fabrieksfunctie, vergelijkbaar met item. In tegenstelling tot een gewoon item blijft stickyHeader zichtbaar tijdens het scrollen van de inhoud van de sectie. Wanneer de sectie volledig is gescrolld, verdringt de koptekst van de volgende sectie de vorige.

Volgens Material Design Guidelines, 2025 verbetert sticky header de navigatie in lange lijsten en vermindert het de cognitieve belasting van de gebruiker. Voor het implementeren van sticky header volstaat het om de sectiekoptekst op de juiste positie ten opzichte van items-elementen in stickyHeader te wikkelen.

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

Veelgestelde vragen

Waarin verschilt LazyColumn van Column in Compose?

Column rendert alle elementen in één keer en is geschikt voor lijsten tot 20–30 elementen. LazyColumn maakt alleen zichtbare elementen aan en hergebruikt ze tijdens het scrollen, waardoor duizenden elementen kunnen worden verwerkt zonder prestatieverlies.

Hoe voeg ik scheidingstekens toe tussen elementen van LazyColumn?

Gebruik Arrangement.spacedBy in de parameter verticalArrangement of items-functies met een scheidingsteken via de index. Voor complexe scheidingstekens voegt u een aparte item met Divider() toe tussen de lijstelementen.

Hoe werk ik LazyColumn bij bij wijziging van gegevens?

LazyColumn recomposeert automatisch bij wijziging van de gegevenscollectie, als er stabiele sleutels worden gebruikt. Gegevenswijzigingen gedetecteerd via mutableStateListOf of StateFlow leiden tot het opnieuw tekenen van alleen de gewijzigde elementen.

Kan ik LazyColumn nesten in LazyColumn?

Direct nesten van LazyColumn in LazyColumn wordt niet aanbevolen — beide hebben onafhankelijk scrollen, wat een gebarenconflict veroorzaakt. Gebruik in plaats daarvan een gewone Column met LazyColumn in een scrollbare sectie of LazyVerticalGrid voor rasters.

Hoe bepaal ik of LazyColumn tot het einde is gescrolld?

Gebruik LazyListState.layoutInfo.visibleItemsInfo en vergelijk de index van het laatste zichtbare element met het totale aantal elementen. Voor oneindig scrollen volgt u wanneer het laatste zichtbare element het einde van de lijst nadert.

Samenvatting

  • LazyColumn is een verticale lijst met lazy loading die elementen alleen in het weergavegebied maakt en hergebruikt voor efficiënt werken met grote gegevens.
  • items en item zijn DSL-functies voor het toevoegen van gegevenscollecties en afzonderlijke componenten in LazyColumn met ondersteuning voor sleutels en contentType.
  • LazyListState beheert de scrollpositie en biedt programmatische navigatie via animateScrollToItem en scrollToItem in coroutines.
  • contentType en key zijn de belangrijkste optimalisatiehulpmiddelen die recompositie verminderen en het hergebruik van elementen verbeteren.
  • stickyHeader maakt sectiekopteksten vast aan de bovenkant van de lijst, wat de navigatie in lange lijsten met gegevensgroepering verbetert.
  • Arrangement.spacedBy en contentPadding beheren de ruimtes tussen elementen en randen van LazyColumn voor conformiteit met Material Design.
  • Voor horizontale lijsten met lazy loading gebruikt u LazyRow en voor rasters — LazyVerticalGrid, volgens hetzelfde lazy loading-principe.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook