Compose学习记录(2)-组件状态

  1. Compose中的状态
    可组合函数可以按任意顺序频繁执行,对于组件中的状态需要通过特定方式保存起来。当状态发生变化时,它会自动触发组件UI的重组: remember{ mutableStateOf(T) }
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {val ctx = LocalContext.currentval expand = remember{ mutableStateOf(false) }val expandPadding = if (expand.value) 48.dp else 0.dpSurface(color = MaterialTheme.colorScheme.primary,modifier = modifier.padding(vertical = 4.dp, horizontal = 8.dp)) {Row(modifier = Modifier.fillMaxWidth().padding(20.dp)) {Column(modifier = Modifier.weight(1f).padding(bottom = expandPadding)) {Text(text = "Hello")Text(text = name)}ElevatedButton(onClick = {expand.value = !expand.valuetoast(ctx, "You Click $name")}) {Text(if (expand.value) "Show less" else "Show More")}}}
}
  1. 状态提升
@Composable
fun MyApp(modifier: Modifier = Modifier) {var shouldShowOnboarding by remember { mutableStateOf(true) }Surface(modifier) {if (shouldShowOnboarding) {OnboardingScreen({ shouldShowOnboarding = false })} else {Greetings()}}
}
@Composable
fun OnboardingScreen(onContinueClicked: ()->Unit, modifier: Modifier = Modifier) {Column(modifier = modifier.fillMaxSize(),verticalArrangement = Arrangement.Center,horizontalAlignment = Alignment.CenterHorizontally) {Text("Welcome to the Basics Codelab!")Button(modifier = Modifier.padding(24.dp),onClick = onContinueClicked) {Text("Continue")}}
}
  • Column可设置vertical和horizontal的对齐方式。
  • 状态使用 by remember 如果报错,只需要引入 import androidx.compose.runtime.getValue 、setValue
  • 把状态放到需要用到地方,也就是该组件的父级中(也就是状态提升)。
  1. 创建高效延迟列表
    把 Greetings 中的names增加到100条记录,names: List = List(1000){ “R$it” }
    然后运行界面会很卡顿,并且也不能滑动列表。
    为显示可滚动列,我们需要使用 LazyColumn。LazyColumn 只会渲染屏幕上可见的内容,从而在渲染大型列表时提升效率。
@Composable
fun Greetings(modifier: Modifier = Modifier,names: List<String> = List(1000){ "R$it" }
) {LazyColumn {items(items = names) { name->Greeting(name = name)}}
}
  • LazyColumn里面需要用 items 来定义每一项的内容。
    效果类似于原生的 RecyclerView。
  1. 保留状态
    上面的程序运行时,旋转屏幕后,会触发Activity重新建立,发现状态全部还原为最初始的状态。
    解决方法:remember -> rememberSaveable
val expand = rememberSaveable { mutableStateOf(false) }

参考资料: 谷歌Jetpack Compose 基础知识
https://developer.android.google.cn/codelabs/jetpack-compose-basics?hl=zh-cn#0

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

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

相关文章

STM32CubeMX与RT-Thread Studio协助使用(实现点亮LED)

1创建自己的项目 1-1选择板子 1-2生成的项目 运行一下看是否创建成功 零警告零错误 2配置STM32Cude 2-1找打如图图标点击&#xff08;CubeMX的图标&#xff09; 2-2输入自己安装的路径选中exe文件 点击Browse 找到如图选中&#xff0c;在打开&#xff08;STM32CubeMX的安装路…

202406261021_二分查找2

202406261021_二分查找2 ✏随笔34. 在排序数组中查找元素的第一个和最后一个元素代码总结 69. x的平方根代码总结 367. 有效的完全平方数代码总结 (Weather::上海 ⛅多云&#xff0c;13~23℃ 良 清风徐徐&#x1f318;) ✏随笔 34. 在排序数组中查找元素的第一个和最后一个元素…

echarts 5.5.0版本下的层叠柱形图,每个值都从0开始,会有覆盖情况

需求&#xff1a; 1、每个公司&#xff0c;需要两个柱子去展示&#xff08;stack: 1是第一个柱子&#xff0c;stack:2,是第二个柱子&#xff09;&#xff1b; 2、必须每个数据都是从0开始&#xff0c;不在上一个值上累加&#xff1b; 3、鼠标滑上去的时候&#xff0c;最大值…

什么是API?如何进行API对接?

目录 一、API和API对接的定义 二、API接口的应用场景 三、为什么需要API对接 四、如何进行API对接 GET请求 POST请求 五、API对接的注意事项 在这个数字化时代&#xff0c;API像一把万能钥匙&#xff0c;让数据流动起来&#xff0c;创造出无限可能。本文旨在介绍API及其…

点云处理实战 PCL求解点云表面曲率

目录 一、什么是曲率 二、曲率计算过程 三、pcl 求解点云局部曲率 四、思考?为何曲率计算会使用协方差矩阵? 五、推荐阅读 一、什么是曲率 曲率是几何学中用来描述曲线或曲面形状变化的一个量。它反映了曲线或曲面的弯曲程度。在不同的上下文中,曲率的定义和计算方式有…

如何在Spring Boot中实现文件上传和下载

如何在Spring Boot中实现文件上传和下载 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Spring Boot应用中实现文件的上传和下载功能&…

科普:什么是 BC-404 ?全方位解读最新通缩型 NFT 标准

区块链技术飞速发展的今天&#xff0c;创新从未停歇。继 ERC-404 标准问世后&#xff0c;一个名为 BC-404 的新标准应运而生&#xff0c;为 NFT 市场带来了全新的可能性。BC-404&#xff08;Bonding Curve 404&#xff09;—基于对 ERC-404 的改进&#xff0c;加密货币中第一个…

在ROS2中蓝牙崩溃的原因分析

在ROS2中&#xff0c;如果蓝牙模块没有成功启动&#xff0c;可能的原因有几个方面&#xff1a; 1. **硬件问题**&#xff1a;首先需要确认蓝牙硬件本身是否正常工作&#xff0c;包括检查蓝牙模块是否正确连接到系统&#xff0c;以及模块是否存在物理损坏。 2. **驱动问题**&a…

三、知识库搭建

知识库搭建 1 介绍词向量向量数据库 2 使用embedding API3 数据处理数据加载数据清洗文档分割 4 搭建并使用向量数据库4.1 自定义embedding封装4.2 chroma数据库4.3 向量检索 详细代码参考&#xff1a;https://github.com/lin902/llm-application 1 介绍 词向量 词向量就是把…

logging日志级别介绍

1 日志的等级可以分为5个 从底到高分别是 debug 程序调式bug使用 info 程序正常运行 warning 发出警告 error 程序出错 critical 特别验证 程序不能运行 2 使用&#xff1a; import logging logging.debug(这是一个dug日志的信息) 3 设置logging的配置信息 创建…

RK3568平台开发系列讲解(调试篇)分析内核调用的利器 ftrace

🚀返回专栏总目录 文章目录 一. 指定 ftrace 跟踪器二、设置要 trace 的函数三、ftrace 的开关四、查看 trace五、trace-cmd 的使用六、trace-cmd 的常用选项6.1、查看可以跟踪的事件6.2、跟踪特定进程的函数调用6.3、函数过滤6.4、限制跟踪深度6.5、追踪特定事件沉淀、分享、…

MYSQL insert into select 遇到的一个错误 Truncated incorrect DOUBLE value: ‘完成‘

今日在mysql 使用insert into mysql 报错了 》》Truncated incorrect DOUBLE value: ‘完成’。 单独把select 拉出来查询没有问题&#xff0c;但是一和insert into就报错了。 这种insert into select的sql 如果用了where 条件请在条件上 完全遵从数据格式&#xff0c;&#x…

CesiumJS【Basic】- #016 多边形面渲染“花了”的问题

文章目录 多边形面渲染“花了”的问题1 目标2 问题代码3 修正后代码4 总结多边形面渲染“花了”的问题 1 目标 解决多边形的面“花了”的问题 2 问题代码 使用Cesium.PerInstanceColorAppearance渲染后出现色斑 import * as Cesium from "cesium";const viewer …

防火墙双机热备

防火墙双机热备 随着移动办公、网上购物、即时通讯、互联网金融、互联网教育等业务蓬勃发展&#xff0c;网络承载的业务越来越多&#xff0c;越来越重要。所以如何保证网络的不间断传输成为网络发展过程中急需解决的一个问题。 防火墙部署在企业网络出口处&#xff0c;内外网之…

Orangepi Zero2使用外设驱动库wiringOP配合时间函数驱动HC-SR04超声波测距模块

目录 一、HC-SR04超声波模块原理和硬件接线 1.1 超声波测距原理&#xff1a; 1.2 超声波时序图&#xff1a; 1.3 HC-SR04超声波模块硬件接线&#xff1a; 二、时间函数 2.1 时间函数gettimeofday()原型和头文件&#xff1a; 2.2 使用gettimeofday()函数获取当前时间的秒数…

【osgEarth】Ubuntu 22.04 源码编译osgEarth 3.5

下载源代码 git clone --depth1 https://dgithub.xyz/gwaldron/osgearth -b osgearth-3.5 下载子模块 git submodule update --init 如果下载不过来&#xff0c;就手动修改下.git/config文件&#xff0c;将子模块的地址替换成加速地址 (base) yeqiangyeqiang-Default-string…

打印一张A4纸多少钱?打印a4多少钱一张

在数字化日益发展的今天&#xff0c;打印服务依然是办公、学习和生活中不可或缺的一部分。对于广大用户来说&#xff0c;了解A4纸打印的价格成为选择打印服务的重要参考因素。那么&#xff0c;A4纸打印到底多少钱一张呢&#xff1f; 在琢贝云打印平台&#xff0c;打印价格非常实…

Arcengine 添加字段时,显示General function failuer

一、现象 Arcengine开发的时候&#xff0c;在addfield&#xff08;添加字段&#xff09;操作时&#xff0c;显示General function failuer。如下图所示&#xff1a; 二、问题原因 General function failuer是常规故障&#xff0c;问题原因是文件占用&#xff0c;只要把文件在…

文华wh6均线交易策略多空波段止盈止损提示主图指标公式源码

文华wh6均线交易策略多空波段止盈止损提示主图指标公式源码&#xff1a; EMA120:EMA(C,120); RSV:(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; K:SMA(RSV,3,1); D:SMA(K,3,1); J:3*K-2*D; DRAWTEXT(C>EMA120&&J<0,L,多),VALIGN0; DRAWTEXT(C<EMA…

AcWing算法基础课笔记——求组合数3

求组合数Ⅲ 20万组数据&#xff0c; 1 ≤ b ≤ a ≤ 1 0 18 , 1 ≤ p ≤ 1 0 5 1 \le b \le a \le 10^{18}, 1\le p \le 10 ^5 1≤b≤a≤1018,1≤p≤105&#xff0c;使用卢卡斯定理。 卢卡斯定理&#xff1a; C a b ≡ C a m o d p b m o d p C a / p b / p ( m o d p ) C_a…