LazyColumn 是 Compose 中实现垂直滚动列表的核心组件,只组合可见项,性能优异。 通过 items()、item() 及其混合使用, 可以灵活构建列表、分隔线、头部尾部,并优雅处理空状态。
items(count) 或 items(list) 基于数据源生成列表项。
@Composable
fun FruitList() {
val fruits = listOf("🍎苹果", "🍌香蕉", "🍇葡萄", "🍊橙子")
LazyColumn {
items(fruits) { fruit ->
Text(text = fruit, modifier = Modifier.padding(12.dp))
}
}
}
插入单个静态或动态组件,常用于标题、分隔线、加载更多、广告位。
LazyColumn {
item {
Text("🎯 今日推荐",
style = MaterialTheme.typography.h5)
}
items(recommendList) { item ->
ListRow(item)
}
item {
Divider(thickness = 2.dp)
}
}
将 item() 与 items() 按任意顺序组合,构建复杂列表布局。
| 组合模式 | 典型场景 | 示例 |
|---|---|---|
| item + items | 标题 + 列表 | item{Header()} → items(data){...} |
| items + item | 列表 + 底部按钮 | items(list){...} → item{Footer()} |
| item + items + item | 头部 + 列表 + 尾部 | 最常用混合结构 |
| 多个 item 穿插 | 分隔线、广告、加载指示器 | item{AdBanner()} → items(...) |
LazyColumn {
item {
Text("📚 课程列表",
modifier = Modifier.padding(16.dp))
}
items(courses) { course ->
CourseCard(course)
}
item {
Text("— 没有更多了 —",
modifier = Modifier.padding(16.dp))
}
// 也可以插入空状态判断
}
使用 if-else 在 LazyColumn 内容中判断,或包裹 Box 展示空占位。
@Composable
fun NoteList(notes: List<String>) {
LazyColumn {
if (notes.isEmpty()) {
item {
EmptyStateView(
message = "📭 还没有笔记,点击 + 添加"
)
}
} else {
items(notes) { note ->
NoteItem(note)
}
}
}
}
空状态示意 · 可自定义占位图