「Mac畅玩鸿蒙与硬件29」UI互动应用篇6 - 多选问卷小应用
本篇将带你实现一个多选问卷小应用,用户可以勾选选项并点击提交按钮查看选择的结果。通过本教程,你将学习如何使用 Checkbox
组件、动态渲染列表、状态管理及用户交互,构建完整的应用程序。
关键词
- UI互动应用
Checkbox
组件- 状态管理
- 动态列表渲染
- 用户交互
一、功能说明
本多选问卷小应用允许用户选择多个选项并点击“提交”按钮。提交后会显示用户选择的选项或提示未选择任何选项。这一示例展示了如何使用 Checkbox
组件管理用户选择,并动态显示内容。
二、所需组件
@Entry
和@Component
装饰器Column
和Row
布局组件Checkbox
组件用于用户选择Button
组件用于提交@State
修饰符用于状态管理
项目结构
- 项目名称:
MultiSelectSurveyApp
- 自定义组件名称:
SurveyPage
- 代码文件:
SurveyPage.ets
、Index.ets
三、代码实现
// 文件名:SurveyPage.ets// 定义问卷页面组件
@Component
export struct SurveyPage {// 问卷选项数组questions: string[] = ['选项1', '选项2', '选项3', '选项4'];// 状态数组,用于保存每个选项的选中状态@State selectedAnswers: boolean[] = [false, false, false, false];@State isSubmitted: boolean = false; // 用于指示是否已提交// 构建页面布局和组件build() {Column({ space: 20 }) { // 垂直布局容器,子组件间距为 20// 问卷标题Text('请选择你喜欢的选项:').fontSize(24).fontWeight(FontWeight.Bold).alignSelf(ItemAlign.Center);// 使用 ForEach 渲染多个复选框ForEach(this.questions, (question: string, index: number) => {Row() {Checkbox({ name: `checkbox${index}`, group: 'surveyGroup' }) // 创建复选框组件.select(this.selectedAnswers[index]) // 设置选中状态.selectedColor(Color.Blue) // 选中时的颜色.onChange((value: boolean) => { // 回调函数,更新选中状态this.selectedAnswers[index] = value;this.isSubmitted = false; // 每次改变选中状态时重置提交状态});Text(question) // 显示选项文本.fontSize(20).margin({ left: 10 });}});// 提交按钮Button('提交').onClick(() => {this.submitAnswers(); // 提交时触发的操作}).fontSize(20).backgroundColor(Color.Green).fontColor(Color.White).margin({ top: 20 });// 根据提交状态显示不同内容if (this.isSubmitted) {if (this.getSelectedOptions().length > 0) {Text(`你选择了: ${this.getSelectedOptions().join(', ')}`) // 显示选择结果.fontSize(18).fontColor(Color.Blue).margin({ top: 20 });} else {Text('未选择任何选项').fontSize(18).fontColor(Color.Red).margin({ top: 20 });}}}.padding(20).width('100%').height('100%').alignItems(HorizontalAlign.Center);}// 获取已选中的选项列表private getSelectedOptions(): string[] {return this.questions.filter((_, index) => this.selectedAnswers[index]);}// 提交答案的逻辑private submitAnswers() {this.isSubmitted = true; // 更新提交状态console.log('用户提交的答案:', this.getSelectedOptions()); // 在控制台输出选中的答案}
}
// 文件名:Index.ets// 导入自定义组件
import { SurveyPage } from './SurveyPage'// 定义应用入口组件
@Entry
@Component
struct Index {build() {Column() {SurveyPage() // 引用问卷页面组件}.padding(20) // 设置页面内边距}
}
效果示例:用户选择多个选项并点击“提交”按钮后,应用会在页面上显示用户的选择结果。
四、代码解读
@State selectedAnswers
:
用于保存每个选项的选中状态,Checkbox
组件的选中与否根据此状态控制。ForEach
循环:
用于动态生成Checkbox
组件,方便渲染多项问卷选项。getSelectedOptions()
方法:
返回选中的选项数组,供显示和后续处理。isSubmitted
状态:
用于控制提交按钮点击后的显示效果,以便在页面上显示提交结果。
五、优化建议
- 样式调整:可以为
Checkbox
添加自定义样式,使界面更符合应用需求。 - 表单验证:在提交前验证用户是否选择了至少一个选项,避免无效提交。
- 交互反馈:提交后添加反馈提示,如“提交成功”或弹出确认框。
- 多语言支持:通过配置实现不同语言版本的问卷应用。
六、相关知识点
- 「Mac畅玩鸿蒙与硬件14」鸿蒙UI组件篇4 - Toggle 和 Checkbox 组件
- 「Mac畅玩鸿蒙与硬件11」鸿蒙UI组件篇1 - Text 和 Button 组件详解
小结
本篇教程通过多选问卷小应用的实现,演示了 Checkbox
组件的基本用法和状态管理。你学会了如何动态渲染选项并处理用户输入,为开发更复杂的交互应用打下了基础。
下一篇预告
下一篇「UI互动应用篇7 - 简易计步器」将展示如何实现一个简单的计步器应用,帮助用户记录每日步数并显示当前进度。
上一篇:「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现
下一篇:「Mac畅玩鸿蒙与硬件30」UI互动应用篇7 - 简易计步器
相关文章:

「Mac畅玩鸿蒙与硬件29」UI互动应用篇6 - 多选问卷小应用
本篇将带你实现一个多选问卷小应用,用户可以勾选选项并点击提交按钮查看选择的结果。通过本教程,你将学习如何使用 Checkbox 组件、动态渲染列表、状态管理及用户交互,构建完整的应用程序。 关键词 UI互动应用Checkbox 组件状态管理动态列表…...

Flutter中文字体设置指南:打造个性化的应用体验
在使用Flutter进行开发时,可能会遇到中文字体显示不正常或者字体不符合设计需求的情况。Flutter默认的中文字体往往无法满足某些用户对个性化和美观的需求。今天,我们就来详细探讨如何在Flutter应用中设置中文字体,并结合不同场景提供相应的解…...

git下载慢下载不了?Git国内国外下载地址镜像,git安装视频教程
git安装下载的视频教程在这 3分钟完成git下载和安装,git国内外下载地址镜像,Windows为例_哔哩哔哩_bilibili 一、Git安装包国内和国外下载地址镜像 1.1国外官方下载地址 打开Git的官方网站:Git官网下载页面。在页面上选择对应的系统&…...
安卓属性动画插值器(Interpolator)详解
属性动画(Property Animation)是 Android 中一个强大的动画框架,允许开发者对视图的任意属性(如位置、透明度、尺寸、颜色等)进行平滑的动态变化。插值器(Interpolator)作为属性动画的一部分&am…...
OSPF总结
1.定义及相关信息 (1)全称:Open ShortestPath First,开放式最短路径优先 (2)是一种基于链路状态算法的路由协议 (3)目前针对IPv4协议使用的是OSPF Version2(RFC2328) 目前针对IPv6 协议使用的是 OSPF Version3 ( RFC2740 ) (4)运行 OSPF 路由器之间…...
Spring Boot驱动的多维分类知识管理系统
1 绪论 1.1 研究背景 在这个推荐个性化的时代,采用新技术开发一个多维分类的知识管理系统来分享和展示内容是一个永恒不变的需求。本次设计的多维分类的知识管理系统有管理员和用户两个角色。 管理员可以管理用户信息,知识分类,知识信息等&am…...

CSS教程(七)- 背景
介绍 背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。 1 背景颜色 属性名:background-color 作用:指定HTML元素的背景色。 取值:英文颜色、16进制、rgb、rgba、transparent(一般为透明&#…...

PNG图片批量压缩exe工具+功能纯净+不改变原始尺寸
小编最近有一篇png图片要批量压缩,大小都在5MB之上,在网上找了半天要么就是有广告,要么就是有毒,要么就是功能复杂,整的我心烦意乱。 于是我自己用python写了一个纯净工具,只能压缩png图片,没任…...

【双十一特惠】腾讯云省钱攻略:如何智取云计算资源
前言 双十一不仅是购物的狂欢节,对于云计算用户来说,更是一个节省成本的绝佳时机。腾讯云,作为国内领先的云计算服务商,每年双十一都会推出一系列优惠活动。本文将为您揭开如何在这个购物节中,最大化利用腾讯云的优惠…...

爬虫学习8
Frida是一个动态代码插桩工具,允许开发者在运行时修改和调试应用程序 import ...:这行代码表示导入所需的模块或库,但具体的导入内容在图片中被省略了。 rdev frida.get_remote_device():这行代码获取一个远程设备实例ÿ…...

双指针算法的妙用:提高代码效率的秘密(2)
双指针算法的妙用:提高代码效率的秘密(2) 前言: 小编在前几日讲述了有关双指针算法两道题目的讲解,今天小编继续进行有关双指针算法习题的讲解,老规矩,今天还是两道题目的讲解,希望…...
笔记--(网络3)、交换机、VLAN
交换机 交换机(Switch)意为“开关”是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。其他常见的还有电话语音交换机、光纤交换机等。 交换机的…...

昇思大模型平台打卡体验活动:基于MindSpore实现GPT1影评分类
如果你对MindSpore感兴趣,可以关注昇思MindSpore社区 大模型平台 平台说明 昇思大模型平台旨在为AI学习者和开发者提供在线学习的项目、模型、大模型体验和数据集的平台。我们也添加了各领域的经典数据集来帮助学习者解决AI学习过程中的一系列难题, 如…...

如何调整pdf的页面尺寸
用福昕阅读器打开pdf,进入打印页面,选择“属性”,在弹出的页面选择“高级” 选择你想调成的纸张尺寸,然后打印,打印出来的pdf就是调整尺寸后的pdf...

IDA*算法 Power Calculus————poj 3134
目录 闲聊 前言 DFS算法的无效搜索 BFS算法的空间浪费 IDDFS A*算法 IDA* Power Calculus 问题描述 输入 输出 问题分析 代码 闲聊 前几周在忙着数学竞赛,所以就没时间更新,高等数学,一生之敌,真不知道报名的时候我是怎么想…...

重磅!CoRL 2024顶刊会议 清华大学高阳研究组发布“基于大模型先验知识的强化学习”
正在德国举办的机器人研究领域的顶级学术会议CoRL 2024,清华大学交叉信息研究院高阳研究组发布重磅研究成果,提出“基于大模型先验知识的强化学习”框架(Reinforcement Learning with Foundation Priors) 来促进具身智能体在操作任务中的学习…...

泷羽sec学习打卡-Windows基础命令
声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于windows的那些事儿-Base 一、Windows-BaseWindows有哪些版本呢,有什么区别呢?…...
RTC精度及校准
RTC精度偏差: RTC的基准时间和精度与石英晶体的频率相关,晶体的谐振频率取决于温度,因此RTC性能与温度相关,晶体的频率偏差是晶体正常频率的温度反转函数。 一、硬件方面: 1.使用高精度振荡器的RTC模块; …...
jQuery案例
以下是几个常见的 jQuery 示例,展示了它在不同场景下的应用: 1. 隐藏和显示元素 通过按钮点击隐藏和显示一个 <div> 元素。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><met…...

常见 HTTP 状态码分类和解释及服务端向前端返回响应时的最完整格式
目前开发的项目很大程度上是为明年的国产化做准备了,所以借这个机会把用了十年的自研系统全部重写,订立更严格的规范,本文记录一下返回格式及对应状态码。 常见 HTTP 状态码及解释 HTTP 状态码用于表示客户端请求的响应状态,它们…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...