news 2026/3/22 15:39:00

Android Jetpack Compose - Compose 重组、AlertDialog、LazyColumn、Column 与 Row

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android Jetpack Compose - Compose 重组、AlertDialog、LazyColumn、Column 与 Row

一、Compose 重组

1、基本介绍
  1. 重组是 Compose 更新的唯一方式,当状态变化时,Compose 会重新执行受影响的 Composable 函数,生成新的 UI 描述

  2. MutableState<T>是一个可观察的状态容器,它持有一个值,当这个值改变时,会通知所有订阅它的 Composable 函数进行重组

  3. remember 是一个 Composable 函数,用于在 Composable 函数重组时记住一个值

2、演示
(1)演示 1
@ComposablefunCounterDemo(){varcountbyremember{mutableStateOf(0)}println("CounterDemo 重组,count:$count")Button(onClick={count++}){Text("点击了$count次")}}
  1. 启动应用,输出结果如下
CounterDemo 重组,count: 0
  1. 点击按钮,按钮文本发生变化,输出结果如下
CounterDemo 重组,count: 1
(2)演示 2
varnum=10@ComposablefunCounterDemo2(){println("CounterDemo2 重组,num:$num")Column{Button(onClick={num++}){Text("点击了$num次")}Button(onClick={println("[查看] 点击了$num次")}){Text("查看 num")}}}
  1. 启动应用,输出结果如下
CounterDemo2 重组,num: 10
  1. 点击第一个按钮,按钮文本未发生变化,无输出结果

  2. 点击第二个按钮,输出结果如下

[查看] 点击了 12 次
(3)演示 3
valcount:MutableState<Int>=mutableStateOf(10)@ComposablefunCounterDemo3(){println("CounterDemo3 重组,num:${count.value}")Column{Button(onClick={count.value++}){Text("点击了${count.value}次")}Button(onClick={println("[查看] 点击了${count.value}次")}){Text("查看 count")}}}
  1. 启动应用,输出结果如下
CounterDemo3 重组,num: 10
  1. 点击第一个按钮,按钮文本发生变化,输出结果如下
CounterDemo3 重组,num: 11
  1. 点击第二个按钮,输出结果如下
[查看] 点击了 11 次

二、AlertDialog

varshowDialogbyremember{mutableStateOf(false)}Button(onClick={showDialog=true}){Text("显示对话框")}if(showDialog){AlertDialog(onDismissRequest={showDialog=false},title={Text("确认删除")},text={Text("确定要删除这条记录吗?")},confirmButton={Button(onClick={showDialog=false}){Text("确定")}},dismissButton={Button(onClick={showDialog=false}){Text("取消")}})}

三、LazyColumn

1、基本介绍

LazyColumn 是 Compose 中用于显示垂直滚动列表的组件,它只渲染当前屏幕可见的列表项,适用于大量数据列表的显示

2、演示
  1. LazyColumn 的基本使用
valitems=listOf("Item 1","Item 2","Item 3","Item 4","Item 5")LazyColumn{items(items.size){index->Text(text=items[index],modifier=Modifier.padding(16.dp),fontSize=18.sp)}}
valdataList=listOf("苹果","香蕉","橙子","葡萄")LazyColumn{itemsIndexed(dataList){index,item->Text(text="第${index+1}项:$item",modifier=Modifier.padding(16.dp),fontSize=18.sp)}}
  1. 动态数据的 LazyColumn
valdataList=remember{mutableStateListOf("苹果","香蕉","橙子","葡萄")}Column{LazyColumn{itemsIndexed(dataList){index,item->Text(text="第${index+1}项:$item",modifier=Modifier.padding(16.dp),fontSize=18.sp)}}Button(onClick={dataList.add("西瓜")}){Text(text="添加",fontSize=18.sp)}}
vardataListbyremember{mutableStateOf(listOf("苹果","香蕉","橙子","葡萄"))}Column{LazyColumn{itemsIndexed(dataList){index,item->Text(text="第${index+1}项:$item",modifier=Modifier.padding(16.dp),fontSize=18.sp)}}Button(onClick={dataList=dataList+"西瓜"}){Text(text="添加",fontSize=18.sp)}}
  1. LazyColumn 的点击事件
valdataList=remember{mutableStateListOf("苹果","香蕉","橙子","葡萄")}LazyColumn{itemsIndexed(dataList){index,item->Text(text="第${index+1}项:$item",modifier=Modifier.padding(16.dp).clickable{dataList.remove(item)},fontSize=18.sp)}}
  1. 带有列表头部的列表
valdataList=remember{mutableStateListOf("苹果","香蕉","橙子","葡萄")}LazyColumn{item{Text(text="列表头部",modifier=Modifier.padding(16.dp),fontSize=20.sp,fontWeight=FontWeight.Bold)Divider()}itemsIndexed(dataList){index,item->Text(text="第${index+1}项:$item",modifier=Modifier.padding(16.dp).clickable{dataList.remove(item)},fontSize=18.sp)}}

四、Column 与 Row

1、基本介绍
  • Column 和 Row 是 Compose 中用于线性排列子组件的核心布局容器,本质上是 Android 传统布局中 LinearLayout 的替代
  1. Column 用于垂直方向排列子组件,即从上到下

  2. Row 用于水平方向排列子组件,即从左到右

2、演示
  1. Column 的基本使用
Column(modifier=Modifier.background(Color.LightGray).padding(16.dp)){Text(text="第一个垂直子组件",modifier=Modifier.padding(4.dp))Text(text="第二个垂直子组件",modifier=Modifier.padding(4.dp))Text(text="第三个垂直子组件",modifier=Modifier.padding(4.dp))}
  1. Row 的基本使用
Row(modifier=Modifier.background(Color.LightGray).padding(16.dp)){Text(text="第一个水平子组件",modifier=Modifier.padding(4.dp))Text(text="第二个水平子组件",modifier=Modifier.padding(4.dp))Text(text="第三个水平子组件",modifier=Modifier.padding(4.dp))}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 2:17:20

用鲸鱼优化算法优化LSTM模型参数

使用鲸鱼优化算法对LSTM的隐含层神经网络&#xff0c;学习率&#xff0c;训练次数三个参数进行寻优&#xff0c;WOA-LSTM模型的输入数据的自变量是多维即多列数据输入&#xff0c;输出的因变量单维即单列数据输出&#xff0c;代码内部有详细的注释&#xff0c;可学习性强&#…

作者头像 李华
网站建设 2026/3/14 13:53:39

Unity PicoVR开发 实时预览Unity场景 - 在Pico设备中

1、安装 PDC 工具 2、打开PDC工具&#xff0c;使用 PICO 开发者账号登录。 3、使用 USB 数据线 连接头显。若连接成功&#xff0c;如下图所示&#xff1a; 4、安装串流服务 5、为一体机开启 “开发者” 模式 步骤如下&#xff1a; 开启 PICO VR 一体机。前往 设置 > 通用 …

作者头像 李华
网站建设 2026/3/19 8:48:59

告别“SQL翻译器”:飞算JavaAI如何让开发者实现数据库查询的真正智能化

在当前的软件开发工作中&#xff0c;编写高效且准确的 SQL 查询是一项常见但极具挑战的任务。对于 Java 开发者而言&#xff0c;面对复杂的业务逻辑、多表关联、动态条件筛选等场景&#xff0c;往往需要投入大量时间去设计、编写和调试SQL语句。尽管市场上已有一些AI辅助工具提…

作者头像 李华
网站建设 2026/3/17 15:36:05

宽禁带半导体材料功能作用和性能特征及分析表征技术

宽禁带半导体&#xff08;Wide Bandgap Semiconductors, WBS&#xff09;是新一代半导体材料的核心&#xff0c;因其独特的物理和化学性质&#xff0c;在高温、高频、高功率以及光电子器件等领域展现出巨大的应用潜力。一、种类与成分组成宽禁带半导体材料主要包括碳化硅&#…

作者头像 李华
网站建设 2026/3/22 3:16:35

救命神器8个AI论文工具,研究生高效写作必备!

救命神器8个AI论文工具&#xff0c;研究生高效写作必备&#xff01; 论文写作的“隐形助手”&#xff1a;AI工具如何改变研究生的学术生活 在研究生阶段&#xff0c;论文写作不仅是学术能力的体现&#xff0c;更是时间与精力的巨大挑战。随着人工智能技术的发展&#xff0c;越来…

作者头像 李华
网站建设 2026/3/16 3:18:44

【必藏】RAG技术揭秘:如何同时击败传统搜索和大模型?答案在这里!

RAG技术通过向量检索结合大模型生成能力&#xff0c;突破了传统搜索引擎依赖精确关键词和大模型知识库有限的局限。它实现语义匹配而非关键词检索&#xff0c;能实时获取最新信息&#xff0c;扩展知识覆盖面&#xff0c;减少错误并确保答案来源可追溯。这种技术结合了信息检索和…

作者头像 李华