Skip to main content

Use a lazy list

Required dependencies

This page is standalone. LazyColumn is part of viewcompose-ui-foundation; no optional collection artifact is required:

build.gradle.kts
repositories { mavenCentral() }

dependencies {
implementation("com.viewcompose:viewcompose-material3-android:0.1.0-alpha01")
implementation("androidx.activity:activity:1.12.4")
implementation("com.google.android.material:material:1.13.0")
}

Show a keyed collection

Create LazyListsTutorialActivity.kt:

package com.viewcompose.samples.tutorials

import android.os.Bundle
import androidx.activity.ComponentActivity
import com.viewcompose.material3.android.setMaterial3UiContent
import com.viewcompose.ui.modifier.Modifier
import com.viewcompose.ui.modifier.fillMaxSize
import com.viewcompose.ui.modifier.fillMaxWidth
import com.viewcompose.ui.modifier.padding
import com.viewcompose.ui.unit.dp
import com.viewcompose.ui.foundation.LazyColumn
import com.viewcompose.ui.foundation.Text

class LazyListsTutorialActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setMaterial3UiContent {
val messages = List(100) { index -> "Message #${index + 1}" }

LazyColumn(
items = messages,
key = { message -> message },
contentType = { "message" },
spacing = 8.dp,
modifier = Modifier.fillMaxSize().padding(24.dp),
) { message ->
Text(message, modifier = Modifier.fillMaxWidth())
}
}
}
}

LazyColumn creates and reuses rows around the visible viewport. key must remain stable for the same logical item after insertions or moves. contentType groups rows that can safely reuse the same native structure.

Verify the result

Scroll from Message #1 toward Message #100 and confirm that the Activity remains responsive. Compile with:

./gradlew :samples:tutorials:assembleDebug

Use Tune lazy-list performance only when measurements show that the default prefetch and cache hints need adjustment. Use the lazy collections guide for state control, adaptive grids, and pagers.