LazyColumn in Jetpack Compose — was es ist, Eigenschaften und wie es funktioniert

Autor: IT Sectr Veröffentlicht: 2026-06-29 Lesezeit: 11 Min.

LazyColumn ist eine Composable-Funktion in Jetpack Compose zum Erstellen vertikaler Listen mit Lazy Loading von Elementen. Im Gegensatz zu Column erstellt und komponiert LazyColumn nur die auf dem Bildschirm sichtbaren Elemente und verwendet sie beim Scrollen wieder. Laut Google Android Documentation, 2025 ist LazyColumn dank effizienter Speicherverwaltung das primäre Werkzeug zum Anzeigen großer Datenmengen in mobilen Anwendungen.

Wichtige Erkenntnisse

  • LazyColumn — eine vertikale Jetpack-Compose-Liste mit Lazy Loading, die nur sichtbare Elemente erstellt und beim Scrollen wiederverwendet.
  • items akzeptiert eine Datensammlung und eine Factory-Funktion zum Erstellen von Listenelementen, während item einzelne Komponenten hinzufügt.
  • LazyListState verfolgt die Scrollposition und ermöglicht die programmatische Steuerung der Liste über animateScrollToItem und scrollToItem.
  • Sticky headers fixieren Abschnittsüberschriften beim Scrollen mit stickyHeader am oberen Rand der Liste.
  • LazyColumn unterstützt verschiedene Elementtypen über den contentType-Parameter zur Optimierung der Wiederverwendung.

Was ist LazyColumn in Jetpack Compose

LazyColumn ist eine Composable-Funktion, die eine vertikale scrollbare Liste mit Lazy Loading implementiert. Im Gegensatz zu Column, das alle untergeordneten Elemente auf einmal rendert, erstellt LazyColumn nur Elemente, die sich im Ansichtsbereich befinden.

Der Lazy-Loading-Mechanismus in LazyColumn basiert auf der Wiederverwendung von Elementen: Wenn ein Element beim Scrollen ausgeblendet wird, können seine Komposition und sein Layout für ein neu angezeigtes Element wiederverwendet werden. Dies spart Speicher und CPU-Zeit, insbesondere bei langen Listen.

Laut Android Developers Blog, 2024 kann LazyColumn Listen mit Zehntausenden von Elementen effizient verarbeiten, ohne dass die Leistung signifikant beeinträchtigt wird. Jedes Element in LazyColumn hat einen Schlüssel (key), der Compose hilft, den Zustand des Elements zu identifizieren und zu bewahren, wenn sich die Liste ändert.

Grundlegende Signatur von LazyColumn

LazyColumn akzeptiert die Parameter modifier, state, contentPadding, reverseLayout, verticalArrangement und horizontalAlignment. Der Inhalt wird in einem Lambda-Block über die DSL-Funktionen items und item definiert.

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-Parameter: items und item

Der DSL-Block von LazyColumn stellt die Funktionen items und item zum Hinzufügen von Inhalten bereit. items akzeptiert eine Datensammlung, einen Schlüssel und eine Factory-Funktion zum Erstellen von Elementen. item fügt ein einzelnes statisches Element zur Liste hinzu.

itemsIndexed ist eine Variante von items, die zusätzlich zu den Daten den Elementindex übergibt. Dies ist nützlich, wenn Sie die Position des Elements ohne separate Berechnung kennen müssen. items(size) akzeptiert nur die Anzahl der Elemente und eine Factory ohne Bindung an eine Sammlung.

Der Parameter key in items identifiziert jedes Element eindeutig. Laut Material Design Guidelines, 2025 verbessern Schlüssel die Leistung beim Aktualisieren und Animieren von Elementen, da Compose die Bewegung oder Änderung eines bestimmten Elements anhand seines Schlüssels verfolgen kann.

Beispiel mit verschiedenen Elementtypen

Die Funktion items mit contentType ermöglicht es LazyColumn, die Wiederverwendung von Elementen verschiedener Typen zu optimieren. Im folgenden Beispiel werden Abschnittsüberschriften und normale Zeilen in einer einzigen Liste verwendet.

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

LazyListState und Scroll-Management

LazyListState ist ein Zustandsobjekt von LazyColumn, das die aktuelle Scrollposition, das erste sichtbare Element und den Offset verfolgt. Es kann über rememberLazyListState() erstellt und an den state-Parameter von LazyColumn übergeben werden.

LazyListState bietet die Methoden animateScrollToItem und scrollToItem zum programmatischen Scrollen zu einem bestimmten Element. animateScrollToItem erzeugt eine sanfte Scroll-Animation, während scrollToItem sofort scrollt. Beide Methoden müssen innerhalb einer Koroutine im CompositionContext aufgerufen werden.

Laut Android Developers, 2024 enthält LazyListState auch layoutInfo, das Informationen über die sichtbaren Elemente liefert — deren Indizes, Offsets und Größen. Dies ist nützlich für die Implementierung von Analysen, View-Tracking oder unendlichem Scrollen.

Beispiel mit programmatischem Scrollen

In diesem Beispiel wird LazyColumn über LazyListState gesteuert. Ein Button scrollt die Liste mit einer sanften Animation zum Element mit Index 50.

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

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

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

Leistungsoptimierung von LazyColumn

Der wichtigste Leistungsfaktor von LazyColumn ist die korrekte Verwendung von Schlüsseln. Jedes Element sollte über den key-Parameter einen eindeutigen stabilen Schlüssel haben. Ohne Schlüssel kann Compose Elemente bei Datenänderungen nicht korrekt wiederverwenden, was zu Rekomposition führt.

contentType teilt LazyColumn mit, welche Elemente denselben Layout-Typ haben. Wenn zwei Elemente mit demselben contentType in den Wiederverwendungspool gelangen, kann LazyColumn ihr Layout ohne Rekomposition wiederverwenden. Laut Android Developers Blog, 2024 verbessert contentType die Leistung um 30–50% in Listen mit verschiedenen Elementtypen.

Für LazyColumn ist es auch wichtig, instabile Parameter in Factory-Funktionen zu vermeiden. Jedes Mal, wenn sich ein Elementparameter ändert, komponiert Compose dieses Element neu. Die Verwendung von remember und derivedStateOf für stabile Werte reduziert die Anzahl der Rekompositionen.

Tabelle der Leistungsfaktoren

FaktorAuswirkungEmpfehlung
Schlüssel (key)KritischLegen Sie immer einen eindeutigen stabilen key für items fest
contentTypeErheblichGeben Sie den Elementtyp an, um die Wiederverwendung zu optimieren
ElementgrößeMäßigVerwenden Sie wo möglich feste Größen
Verschachtelte ListenKritischVermeiden Sie LazyColumn innerhalb von LazyColumn — verwenden Sie LazyVerticalGrid

Sticky headers und Abschnitte in LazyColumn

stickyHeader ist eine DSL-Funktion von LazyColumn, die eine Abschnittsüberschrift beim Scrollen am oberen Rand der Liste fixiert. Wenn der nächste Abschnitt den oberen Rand erreicht, ersetzt seine Überschrift die aktuelle. Dieses Verhalten ist Benutzern von Kontaktlisten und Kalendern vertraut.

stickyHeader akzeptiert einen Schlüssel und eine Factory-Funktion, ähnlich wie item. Im Gegensatz zu einem normalen item bleibt stickyHeader sichtbar, während durch den Inhalt seines Abschnitts gescrollt wird. Wenn ein Abschnitt vollständig gescrollt ist, schiebt die Überschrift des nächsten Abschnitts die vorherige hinaus.

Laut Material Design Guidelines, 2025 verbessern sticky header die Navigation in langen Listen und reduzieren die kognitive Belastung des Benutzers. Um einen sticky header zu implementieren, umschließen Sie einfach eine Abschnittsüberschrift in der richtigen Position relativ zu den items-Elementen mit stickyHeader.

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

Häufig gestellte Fragen

Wie unterscheidet sich LazyColumn von Column in Compose?

Column rendert alle Elemente auf einmal und eignet sich für Listen mit bis zu 20–30 Elementen. LazyColumn erstellt nur sichtbare Elemente und verwendet sie beim Scrollen wieder, sodass Sie mit Tausenden von Elementen ohne Leistungsverlust arbeiten können.

Wie füge ich Trennzeichen zwischen LazyColumn-Elementen hinzu?

Verwenden Sie Arrangement.spacedBy im Parameter verticalArrangement oder items-Funktionen mit einem Trennzeichen über den Index. Für komplexe Trennzeichen fügen Sie ein separates item mit Divider() zwischen den Listenelementen hinzu.

Wie aktualisiere ich LazyColumn bei Datenänderungen?

LazyColumn wird automatisch neu komponiert, wenn sich die Datensammlung ändert, sofern stabile Schlüssel verwendet werden. Datenänderungen, die über mutableStateListOf oder StateFlow erkannt werden, führen dazu, dass nur die geänderten Elemente neu gezeichnet werden.

Kann LazyColumn in LazyColumn verschachtelt werden?

Direkte Verschachtelung von LazyColumn in LazyColumn wird nicht empfohlen — beide haben unabhängiges Scrollen, was zu Gestenkonflikten führt. Verwenden Sie stattdessen eine normale Column mit LazyColumn innerhalb einer scrollbaren Section oder LazyVerticalGrid für Raster.

Wie erkenne ich, dass LazyColumn bis zum Ende gescrollt wurde?

Verwenden Sie LazyListState.layoutInfo.visibleItemsInfo und vergleichen Sie den Index des letzten sichtbaren Elements mit der Gesamtzahl der Elemente. Für unendliches Scrollen verfolgen Sie, wann sich das letzte sichtbare Element dem Ende der Liste nähert.

Zusammenfassung

  • LazyColumn — eine vertikale Liste mit Lazy Loading, die nur Elemente im Ansichtsbereich erstellt und wiederverwendet, um effizient mit großen Datenmengen zu arbeiten.
  • items und item — DSL-Funktionen zum Hinzufügen von Datensammlungen und einzelnen Komponenten zu LazyColumn mit Schlüssel- und contentType-Unterstützung.
  • LazyListState verwaltet die Scrollposition und bietet programmatische Navigation über animateScrollToItem und scrollToItem in Koroutinen.
  • contentType und key — die wichtigsten Leistungsoptimierungswerkzeuge, die Rekomposition reduzieren und die Elementwiederverwendung verbessern.
  • stickyHeader fixiert Abschnittsüberschriften am oberen Rand der Liste und verbessert die Navigation in langen Listen mit gruppierten Daten.
  • Arrangement.spacedBy und contentPadding verwalten die Abstände zwischen Elementen und Rändern von LazyColumn für die Konformität mit Material Design.
  • Für horizontale Listen mit Lazy Loading verwenden Sie LazyRow und für Raster — LazyVerticalGrid, nach dem gleichen Lazy-Loading-Prinzip.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch