Jetpack Compose 列表

延迟列表

系统会对所有列表项进行组合和布局,无论它们是否可见,因此如果您需要显示大量列表项(或长度未知的列表),则使用 `Column` 等布局可能会导致性能问题。

Compose 提供了一组组件,这些组件只会对在组件视口中可见的列表项进行组合和布局。这些组件包括 `LazyColumn``LazyRow`

`item()` 用于添加单个列表项,`items(Int)` 用于添加多个列表项:

ts 复制代码
LazyColumn(modifier = modifier.fillMaxWidth(), contentPadding = PaddingValues(top = 100.dp)) {
    // Add a single item
    item {
        Text(modifier = Modifier.fillMaxWidth().height(50.dp).background(color = Color.Black).padding(all = 15.dp),
            text = "First item",
            color = Color.White)
    }
    // Add 5 items
    items(5) { index ->
        Text(modifier = Modifier.fillMaxWidth().height(50.dp).background(color = Color.Blue).padding(all = 15.dp),
            text = "Item: $index",
            color = Color.White)
    }
    // Add another single item
    item {
        Text(modifier = Modifier.fillMaxWidth().height(50.dp).background(color = Color.Green).padding(all = 15.dp),
            text = "Last item")
    }
}

还有许多扩展函数可用于添加列表项的集合,例如 List。借助这些扩展函数,我们可以轻松迁移上述 `Column` 示例

ts 复制代码
@Composable
private fun example2(modifier:Modifier = Modifier) {
    val messages = arrayListOf("Title1","Title2", "Title3", "Title4", "Title5",  "Title6",  "Title7",  "Title8")
    /**
     * import androidx.compose.foundation.lazy.items
     */
    LazyColumn(modifier = modifier, contentPadding = PaddingValues(top = 100.dp)) {
        items(messages) { message ->
            MessageRow(message)
        }
    }
}

@Composable
private fun MessageRow(message:String) {
    ElevatedCard(
        elevation = CardDefaults.cardElevation(
            defaultElevation = 6.dp
        ),
        modifier = Modifier
            .fillMaxWidth()
            .height(150.dp)
            .padding(start = 15.dp, end = 15.dp, top = 15.dp)
    ) {
        Text(
            text = message,
            modifier = Modifier
                .padding(16.dp),
            textAlign = TextAlign.Center,
        )
    }
}

上一篇 Jetpack Compose 分页器 Pager

相关推荐
我命由我123455 小时前
Android 开发 - 获取当前设备屏幕的旋转角度
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
我命由我123452 天前
人脸识别 - 判断人脸是否在画面中央
java·人工智能·python·java-ee·人脸识别·android jetpack·android runtime
一个用户名i3 天前
【Compose 系列】第 4 篇:布局与 Modifier,写界面不走弯路
android jetpack
一个用户名i3 天前
【Compose 系列】第 3 篇:状态管理入门,让界面「动」起来
android jetpack
alexhilton5 天前
规范驱动开发:让AI生成符合预期的KMP代码
android·kotlin·android jetpack
一个用户名i6 天前
【Compose 系列】第 1 篇:认识 Compose,为什么要学它
android·android jetpack
我命由我123458 天前
Android 开发问题:unexpected element <service> found in <manifest>
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
我命由我123458 天前
Android 开发问题:TopAppBar 和 topAppBarColors API is experimental...
android·java·java-ee·kotlin·android studio·android jetpack·android-studio
alexhilton11 天前
千万别误用Android Skills
android·kotlin·android jetpack
XiaoLeisj14 天前
Kotlin Flow 常用操作符:数据变换 map、filter、onEach,时间控制 debounce、sample,终端聚合 reduce、fold
android·kotlin·android jetpack·协程·响应式编程·flow