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))}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1119585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入 ‘Token Consumption Profiling’:在大规模图中精准定位哪一个‘思维步骤’最费钱?

深入 ‘Token Consumption Profiling’&#xff1a;在大规模图中精准定位哪一个‘思维步骤’最费钱&#xff1f;各位同仁&#xff0c;下午好&#xff01;今天我们的话题聚焦于一个在当前AI时代变得尤为关键的挑战&#xff1a;如何在与大规模图数据交互时&#xff0c;精准地识别…

基于SpringBoot的农产品溯源系统

背景分析农产品溯源系统的需求源于消费者对食品安全问题的日益关注。近年来&#xff0c;农药残留、假冒伪劣产品等问题频发&#xff0c;传统农业供应链信息不透明&#xff0c;导致消费者难以追溯农产品源头。政府出台《食品安全法》《农产品质量安全追溯管理办法》等政策&#…

从零开始学CTF:网络安全竞赛完全指南,建议收藏学习

从零开始学CTF&#xff1a;网络安全竞赛完全指南&#xff0c;建议收藏学习 文章全面介绍网络安全竞赛&#xff0c;重点解析CTF比赛的概念、规则和五大类别&#xff08;Web安全、逆向工程、二进制安全、密码学和隐写术&#xff09;&#xff0c;并对比了CTF比赛、信息安全比赛和…

从2025到2026:SUNX 合约交易所是如何一步步赢得用户信任的

从 2025 到 2026&#xff1a;我意识到 SUNX 真的不一样了如果你也是长期做合约、频繁交易 BTC、ETH 的老用户&#xff0c;大概都会有同样的感受&#xff1a;真正决定你把主账户放在哪家交易所的&#xff0c;从来不是广告&#xff0c;而是“用久了安不安心”。过去几年&#xff…

2025 网安工程师证怎么考?11 月考试 + 8 月报名,新考点(Prompt 注入 / SM4 算法)拆解!

网络信息安全工程师是一种专门从事网络安全工作的职业。随着互联网的快速发展和普及&#xff0c;网络安全问题也日益突出&#xff0c;因此网络信息安全工程师的需求也越来越大。 网络信息安全工程师主要负责保护网络系统和数据的安全&#xff0c;防止黑客攻击、病毒侵入、数据泄…

2026年焦虑是无法避免的

当潮水退去&#xff0c;我们才发现自己并非在裸泳&#xff0c;而是身处一片正在冰封的海域。2025年年末&#xff0c;有幸与几位业内公认的大神级人物小聚。推杯换盏间&#xff0c;聊的不再是前沿的技术趋势和激动人心的架构革新&#xff0c;反而弥漫着一种难以名状的沉重。一位…

什么是 ‘Latency Budgeting’:为图中每一个节点设置纳秒级的超时阈值,实现强制故障转移

欢迎来到本次关于分布式系统性能优化的深度探讨。今天&#xff0c;我们将聚焦一个关键且极具挑战性的概念——“Latency Budgeting”&#xff0c;特别是当我们将这一理念推向极致&#xff0c;为系统中的每一个节点设置纳秒级的超时阈值&#xff0c;以实现强制故障转移时。作为一…

【Mybatis 框架】SQL 注入判断技巧全解,零基础入门到精通,收藏这篇就够了!

Mybatis框架&#xff1f;老生常谈&#xff1f;不&#xff01; MyBatis&#xff0c;这玩意儿在Java圈子里谁还没听过&#xff1f;ORM框架嘛&#xff0c;把Java对象和数据库表里的数据对应起来&#xff0c;省得你写一堆JDBC代码。但它跟Hibernate那种“全自动”选手不一样&#…

为什么游戏需要“加载时间“?——从硬盘读取到内存渲染

&#x1f3ae; 为什么游戏需要"加载时间"&#xff1f;——从硬盘读取到内存渲染 &#x1f4be;大家好&#xff0c;我是无限大&#xff0c;欢迎收看十万个为什么系列文章 希望今天的内容能对大家有所帮助想象一下&#xff1a;你迫不及待地打开新买的3A大作&#xff0c…

C盘清理技巧分享大纲

C盘清理技巧分享大纲清理临时文件Windows系统自带的磁盘清理工具可以快速删除临时文件、下载缓存和系统日志。通过运行cleanmgr命令选择C盘进行扫描和清理。卸载不必要程序控制面板中的“程序和功能”可以查看已安装软件&#xff0c;卸载长时间未使用或冗余的应用程序。第三方工…

数字员工赋能AI销冠系统与AI提效软件系统提升企业运营效率

数字员工通过与AI销冠系统的协同工作&#xff0c;能够有效优化企业的业务流程。它们自动化处理重复性任务&#xff0c;使得企业在全天候内以更高效率与客户沟通&#xff0c;这不仅提升了客户体验&#xff0c;还降低了人工成本。此外&#xff0c;数字员工能够实时收集和分析客户…

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

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

车间手机管理难题破解指南:从“一刀切禁止”到“数字化疏导”的科学决策

开篇&#xff1a;点出决策误区许多制造企业在管理车间手机使用时&#xff0c;常陷入“只堵不疏”的误区。数据显示&#xff0c;超过50%的企业在推行手机管控时&#xff0c;因 “手段粗暴引发抵触”、“缺乏替代方案降低效率” 或 “管理系统与生产实际脱节” 而导致政策流于形式…

网络进阶教程:节点小宝中心节点策略的反向使用方法!

最近有小伙伴咨询到小白&#xff1a;如果家里局域网里有一台24h开机状态的NAS&#xff0c;且在这台NAS上已经部署了节点小宝&#xff0c;现在有一台机器是在异地状态下也部署了节点小宝。问&#xff1a;家里局域网下的其他设备不安装节点小宝能否通过中心节点访问到异地的那台设…

基于springboot的民间救援队救助系统设计与实现

背景分析近年来&#xff0c;自然灾害、突发公共事件频发&#xff0c;传统救援体系在响应速度、资源调配等方面存在局限性。民间救援队作为重要补充力量&#xff0c;因组织分散、信息不对称等问题&#xff0c;难以高效协同。SpringBoot框架的轻量化、快速开发特性&#xff0c;为…

2025生产管理系统排名:黑湖、用友、鼎捷,谁更适合中小企业?

在数字化转型浪潮中&#xff0c;制造企业决策者&#xff08;老板/生产总监/采购负责人&#xff09;常面临选型对比难的痛点&#xff1a;不知如何判断系统与自身工艺流程的适配性、担心隐藏成本导致预算超支、恐惧系统上线后落地效果不及预期。为破解难题&#xff0c;本文基于真…

基于PFC离散元颗粒流模拟霍普金森杆(SHPB)压缩岩石/混凝土

基于PFC离散元颗粒流模拟霍普金森杆&#xff08;SHPB&#xff09;压缩岩石/混凝土在岩土工程和材料力学领域&#xff0c;理解岩石和混凝土等材料在动态荷载下的力学响应至关重要。霍普金森杆&#xff08;SHPB&#xff09;实验是研究此类材料动态力学性能的经典手段&#xff0c;…

解析 LangSmith 的 ‘Nested Trace’:如何通过深度树状视图定位 20 层嵌套循环中的逻辑瓶颈?

在现代软件开发中&#xff0c;尤其是在构建基于人工智能、微服务架构或复杂数据处理流水线时&#xff0c;系统的行为往往不再是简单的线性执行。函数调用可能层层嵌套&#xff0c;服务间调用错综复杂&#xff0c;形成一个深不见底的调用链。当性能问题浮现、逻辑错误发生时&…

从免费到专业:飞算JavaAI如何定义企业级智能开发新标准

在智能编程辅助工具日益普及的今天&#xff0c;开发者面临的选择不再仅仅是“用或不用”&#xff0c;而是“如何用得更好、更高效”。飞算JavaAI近期推出的个人专业版&#xff0c;并非简单增加功能&#xff0c;而是针对企业在真实开发场景中遇到的效率瓶颈、质量顾虑与协作障碍…

Jenkins RCE漏洞CVE-2024-23897:从任意文件读取到远程代码执行

Jenkins RCE via CVE-2024-23897 CVSS V3 详情 向量&#xff1a; CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H 基础评分&#xff1a; 9.8 严重 受影响版本 Jenkins 2.441 及更早版本Jenkins LTS 2.426.2 及更早版本 漏洞存在原因 Jenkins 使用 args4j 库来解析 Jenkins 控制…