使用多种项目类型构建列表

您可以使用包含多种项目类型的列表来显示混合内容类型,例如文本、图像和交互式元素。

版本兼容性

此实现要求您的项目 minSDK 设置为 API 级别 21 或更高。

依赖项

添加多种项目类型

组合包含多种项目类型的列表或网格时,您可以为布局的每个项目指定内容类型。

@Composable
fun ListWithMultipleItems(messages: List<Any>) {
    LazyColumn {
        items(
            messages.size,
            contentType = { it }
        ) {
            for (message in messages)
                when (message) {
                    is MediaStore.Audio -> AudioMessage(message)
                    is Text -> TextMessage(message)
                }
        }
    }
}

@Composable
fun AudioMessage(message: MediaStore.Audio) {
    TODO("Not yet implemented.")
}

@Composable
fun TextMessage(message: Text) {
    TODO("Not yet implemented.")
}

data class SampleMessage(val text: String, val content: Any)

关于代码的关键点

  • 通过在 items() 中设置 contentType 来指定每个项目的内容类型。
  • 将每个内容类型映射到相应的可组合项。例如,Audio 是在其他地方定义的 contentType,并映射到 AudioMessage 可组合项。
  • Compose 会重用为给定内容类型的每个项目渲染的可组合项。

结果

Code output showing audio and text messages
图 1. 显示音频和文本消息的代码输出。

包含本指南的集合

本指南是涵盖更广泛 Android 开发目标的精选快速指南集合的一部分。

列表和网格允许您的应用以用户易于理解的直观形式显示集合。
了解可组合函数如何让您轻松创建基于 Material Design 设计系统的精美 UI 组件。
本系列视频介绍了各种 Compose API,快速向您展示可用的功能以及如何使用它们。

有问题或反馈?

访问我们的常见问题页面,了解快速指南,或联系我们,让我们知道您的想法。