news 2026/10/9 7:43:21

【Jetpack Compose基础语法学与练】第2课 State状态 + 点击交互

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Jetpack Compose基础语法学与练】第2课 State状态 + 点击交互

前言

上一节课我们完成最简HelloWorld,认识了 @Composable 可组合函数、预览注解。
Compose声明式UI的核心:界面跟随状态自动更新。
本课重点学习状态定义、记忆状态、按钮点击事件,打通「状态‑重组‑界面刷新」完整闭环。

前置:完成第1课,Compose基础项目正常可编译预览

一、完整可运行示例源码

packagecom.example.composefirstimportandroid.os.Bundleimportandroidx.activity.ComponentActivityimportandroidx.activity.compose.setContentimportandroidx.compose.material3.Buttonimportandroidx.compose.material3.Textimportandroidx.compose.runtime.Composableimportandroidx.compose.runtime.getValueimportandroidx.compose.runtime.mutableIntStateOfimportandroidx.compose.runtime.rememberimportandroidx.compose.runtime.setValueimportandroidx.compose.ui.tooling.preview.PreviewclassMainActivity:ComponentActivity(){overridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)setContent{CounterPage()}}}@ComposablefunCounterPage(){// 定义记忆型状态varcountbyremember{mutableIntStateOf(0)}Text(text="当前计数:$count")Button(onClick={count+=1}){Text("点我+1")}}@Preview@ComposablefunCounterPreview(){CounterPage()}

二、逐行代码解读

1. remember { … }

remember 是状态记忆函数。
可组合函数每次重组都会完整执行一遍,如果不套上 remember ,变量每次都会重置,无法保存上一次数值。
作用:在重组过程中保存数据,不会被反复初始化。

2. mutableIntStateOf(0)

生成可观察的整型状态对象,初始值0。
配套还有: mutableStateOf 通用任意类型、 mutableStringStateOf 字符串专用状态。

3. var count by

by 是 Kotlin 属性委托语法。

  • 不加 by :你拿到的是状态对象 MutableIntState ,取值要写 .intValue ;
  • 使用 by 委托:直接读写普通变量 count ,语法简洁。

导入提示

importandroidx.compose.runtime.getValueimportandroidx.compose.runtime.setValue

缺少这两行导入, by 语法会直接报错。

4. Button(onClick = {})

按钮点击回调, onClick 是无参Lambda。
点击时修改状态变量 count +=1 。

5. 重组触发逻辑

count 属于被Compose监听的状态。一旦数值发生变更,Compose触发重组,重新运行 CounterPage ,界面上Text自动刷新出新数字。

关键点:

我们没有手动写刷新界面代码,状态变更自动驱动界面更新。

三、核心概念区分

  1. 普通局部变量
varcount=0

每次重组重置,点击按钮界面不会变化,无法用于UI状态。

  1. remember + 状态对象
varcountbyremember{mutableIntStateOf(0)}

remember留存变量;状态对象可被框架监听;修改状态触发重组,界面刷新。

易错点:

remember 只能放在 @Composable 函数内部,不能放在普通函数、全局作用域。

四、综合练习题

填空题

  1. 用来在重组期间保存数据的函数是________。
  2. 创建整型可监听状态的函数是________。
  3. Kotlin ________语法,可以省去 .intValue ,直接读写状态值。

答案与解析

  1. remember ;解析:没有remember,每次重组变量重置,状态丢失。
  2. mutableIntStateOf ;解析:专门用于整数状态,替代旧版 mutableStateOf(0) ,性能更好。
  3. 属性委托(by);解析:by 将取值赋值交给状态代理,简化代码。

判断题

  1. 去掉 remember,点击按钮,数值会自增但是界面不会更新。()

答案:错误。理由:没有remember,每次重组count重置为0,数值不会累加,界面不会有变化。

  1. onClick 回调内部可以直接修改 remember 包裹的状态变量。()

答案:正确。理由:修改可监听状态,会触发重组,自动刷新UI。

  1. remember 可以直接写在顶层全局位置。()

答案:错误。理由:remember 必须运行在可组合函数的Compose上下文,全局无法调用。

简答题

  1. 简述普通变量和 remember+状态变量最大区别?

参考答案:普通变量重组时重新初始化,数据无法留存,改动不会通知界面;remember 保存变量,状态对象被框架监听,修改后自动重组刷新页面。

  1. 代码实操题

修改示例代码:增加重置按钮,点击后 count 归零。写出完整 CounterPage 函数。参考答案

@ComposablefunCounterPage(){varcountbyremember{mutableIntStateOf(0)}Text(text="当前计数:$count")Button(onClick={count+=1}){Text("点我+1")}Button(onClick={count=0}){Text("重置")}}

解析:新增第二个Button,点击回调把count赋值为0,状态变更触发界面刷新。

五、本课小结

  1. remember :跨重组保存数据;
  2. mutableXXStateOf :可被监听的状态;
  3. by 属性委托简化读写;
  4. 改变状态 → 自动重组 → UI更新,不需要手动刷新控件。

下一课:布局组件 Column、Row、Box,控制元素排列。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/9 7:43:00

Maven从下载到配置全流程:环境变量、镜像加速与避坑指南

用过Java的人都绕不开Maven,但能把Maven顺顺利利装到本地的人,我还真没见过几个。多数人卡住的第一个环节就是“下载”,别笑,这个看似简单的步骤里全是坑:官网慢得像蜗牛、下载到一半断掉、好不容易下完了发现跟JDK版本…

作者头像 李华
网站建设 2026/10/9 7:41:22

基于遗传算法与粒子群算法的智能车动态避障路径规划技术深度学习实战python数据分析与可视化

1.2.2 国外研究现状国外对智能车路径规划技术的研究起步较早,早在20世纪80年代就已经开展了相关的研究工作。卡内基梅隆大学、麻省理工学院、斯坦福大学等高校是该领域的先驱,谷歌、特斯拉、通用汽车等公司也投入了大量资源进行相关技术的研发。在传统路…

作者头像 李华
网站建设 2026/10/9 7:39:48

855协议五端学习版源码解析:从握手到联调避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华