HarmonyOS掌上记账APP开发实践第94篇:如何实现删除多选框选项功能
如何删除多选框选项场景说明通常情况下我们使用多选框都会伴随对选项的操作比较常见的操作是选中后删除比如删除购物车的商品、删除账单、删除图片等等。但是当前HarmonyOS针对多选框组件并没有提供直接的删除其选项的方法需要开发者自己来实现。本例提供了一种实现方案供开发者参考。效果呈现本例demo最终效果如下实现思路本例中涉及的关键特性及实现方案如下多选框使用CheckboxGroup组件构建多选框标题使用Checkbox组件构建多选框选项。删除多选框选项通过CheckboxGroup的onChange回调获取到各个选项的选中状态在删除操作中将选中的选项从选项列表中删除。删除时弹出确认框使用promptAction模块调用showDialog方法弹出对话框通过回调获取到用户点击的是取消按钮还是确定按钮如果是确定按钮则执行删除操作。开发步骤搭建UI布局。整体纵向布局那就采用Column组件全选框用CheckboxGroup组件然后每个选项都包括一个选择框Checkbox组件和一个文本Text组件且为横向布局那我们可以把它们放在Flex组件中最后是一个Button组件。这样整体布局就有了具体代码如下Componentstruct CheckboxDemo{build(){Column(){Flex({}){CheckboxGroup({})Text(水果清单)}Flex({}){Checkbox({})Text(苹果)}Flex({}){Checkbox({})Text(菠萝)}Flex({}){Checkbox({})Text(柚子)}Button(删除)}}}框架搭好了看下效果可以看到主选框和选项对齐了接下来我们来调整下样式。先给CheckboxGroup取个名字fruit_list然后为各个Checkbox添加相同的group名称这样就可以将Checkbox挂靠到CheckboxGroup下剩下的就是给各个组件添加margin、fontSize等通用属性了不清楚各个组件有哪些属性的请自行查阅组件参考具体代码如下Componentstruct CheckboxDemo{build(){Column(){Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center}){// 将CheckboxGroup命名为fruit_listCheckboxGroup({group:fruit_list}).selectedColor(#007DFF)Text(水果清单).margin({right:20}).fontSize(14).lineHeight(20).fontColor(#182431).fontWeight(FontWeight.Bold)}Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center}){// 通过group参数将Checkbox挂到CheckboxGroup下Checkbox({name:苹果,group:fruit_list}).selectedColor(#007DFF)Text(苹果).margin({right:20}).fontSize(14).lineHeight(20).fontColor(#182431).fontWeight(500)}Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center}){Checkbox({name:菠萝,group:fruit_list}).selectedColor(#007DFF)Text(菠萝).margin({right:20}).fontSize(14).lineHeight(20).fontColor(#182431).fontWeight(500)}Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center}){Checkbox({name:柚子,group:fruit_list}).selectedColor(#007DFF)Text(柚子).margin({right:20}).fontSize(14).lineHeight(20).fontColor(#182431).fontWeight(500)}Button(删除).margin({top:20,left:35}).fontSize(15).padding({top:5,bottom:5,left:15,right:15})}}}我们再来看下效果发现多选框的布局已经正常了简化代码。当前代码重复性很高包含Checkbox的三个Flex的结构完全一样我们可以简化一下。把重复的结构通过Builder抽取出来作为一个自定义组件用到的地方进行引用即可每个Flex呈现的内容不同那就将不同的内容作为参数传入。具体代码如下Componentstruct CheckboxDemo{// flexNameList存储checkbox选项的文本内容使用State修饰后flexNameList发生变化UI会同步刷新StateflexNameList:string[][苹果,菠萝,柚子]Builder// 将重复内容封装成flexItem通过参数checkboxName为Text组件传入显示文本通过groupName绑定CheckboxGroupflexItem(checkboxName:string,groupName:string){Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center}){Checkbox({name:checkboxName,group:groupName}).selectedColor(#007DFF)Text(checkboxName).margin({right:20}).fontSize(14).lineHeight(20).fontColor(#182431).fontWeight(500)}.margin({left:36})}build(){Column(){Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center}){CheckboxGroup({group:fruit_list}).selectedColor(#007DFF)Text(水果清单).margin({right:20}).fontSize(14).lineHeight(20).fontColor(#182431).fontWeight(FontWeight.Bold)}// 通过ForEach遍历flexNameList循环渲染生成UIForEach(this.flexNameList,(item:any){// 引用封装的flexItem模板this.flexItem(item,fruit_list)})Button(删除).margin({top:20,left:35}).fontSize(15).padding({top:5,bottom:5,left:15,right:15})}.alignItems(HorizontalAlign.Center)}}添加删除逻辑。本例中是通过以下方式实现删除操作的将选中的水果项从flexNameList中删除为方便展示本文直接将数据存储在数组中实际开发需要对接数据库由于flexNameList被State修饰所以其发生变化时会重新执行Build从而完成UI刷新展示删除后的选项。要实现上述逻辑首先需要获取到被选中的水果项。这里可以通过CheckboxGroup的onChange回调获取当选项的状态发生变化时会触发回调并返回各选项的选中状态。具体代码如下Componentstruct CheckboxDemo{...// itemStatus用来存储各选项的选中状态privateitemStatus:CheckboxGroupResult...build(){Column(){Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center}){CheckboxGroup({group:fruit_list}).selectedColor(#007DFF)// 选项状态发生变化时触发onChange回调各选项的选中状态储存在itemName中并返回通过itemStatus.name可以获取到被选中的选项列表.onChange((itemName:CheckboxGroupResult){this.itemStatusitemName})...}.alignItems(HorizontalAlign.Center)}}将各选项的选中状态存储到itemStatus后我们就可以通过Button触发删除操作了。当点击删除按钮时触发删除操作所以给Button添加onClick事件并添加删除逻辑。代码如下Componentstruct CheckboxDemo{......// itemStatus用来存储各选项的选中状态privateitemStatus:CheckboxGroupResult......build(){Column(){Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center}){CheckboxGroup({group:fruit_list}).selectedColor(#007DFF)// 选项状态发生变化时触发onChange回调各选项的选中状态储存在itemName中并返回通过itemStatus.name可以获取到被选中的选项列表.onChange((itemName:CheckboxGroupResult){this.itemStatusitemName})......Button(删除).margin({top:20,left:35}).fontSize(15).padding({top:5,bottom:5,left:15,right:15})// 点击触发删除操作.onClick((){// 被选中的项存储在this.itemStatus.name列表中for(letiofthis.itemStatus.name){// 从flexNameList中删除被选中的项刷新UIthis.flexNameList.splice(this.flexNameList.indexOf(i),1)}})}.alignItems(HorizontalAlign.Center)}}添加删除确认框。使用promptAction模块调用showDialog方法弹出对话框然后将删除操作绑定到对话框的确定按钮具体代码如下// 导入promptAction模块importpromptActionfromohos.promptAction;Componentstruct CheckboxDemo{......// itemStatus用来存储各选项的选中状态privateitemStatus:CheckboxGroupResult......build(){Column(){Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center}){CheckboxGroup({group:fruit_list}).selectedColor(#007DFF)// 选项状态发生变化时触发onChange回调各选项的选中状态储存在itemName中并返回通过itemStatus.name可以获取到被选中的选项列表.onChange((itemName:CheckboxGroupResult){this.itemStatusitemName})......Button(删除).margin({top:20,left:35}).fontSize(15).padding({top:5,bottom:5,left:15,right:15})// 点击触发删除操作.onClick((){// 调用对话框promptAction.showDialog({title:,message:确定删除吗,buttons:[{text:取消,color:#000000},{text:确定,color:#000000}]})// 用户选择通过data回传当data.index为1时用户选择确定当data.index为0时用户选择取消.then(data{// 当用户选择确定时进行删除操作if(data.index1){// 被选中的项存储在this.itemStatus.name列表中for(letiofthis.itemStatus.name){// 从flexNameList中删除被选中的项刷新UIthis.flexNameList.splice(this.flexNameList.indexOf(i),1)}}})})}.alignItems(HorizontalAlign.Center)}}完整代码本例完整代码如下importpromptActionfromohos.promptAction;EntryComponentstruct CheckboxDemo{StateflexNameList:string[][苹果,菠萝,柚子]privateitemStatus:CheckboxGroupResultBuilderflexItem(checkboxName:string,groupName:string){Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center}){Checkbox({name:checkboxName,group:groupName}).selectedColor(#007DFF)Text(checkboxName).margin({right:20}).fontSize(14).lineHeight(20).fontColor(#182431).fontWeight(500)}.margin({left:36})}build(){Column(){if(this.flexNameList.length!0){Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center}){CheckboxGroup({group:fruit_list}).selectedColor(#007DFF).onChange((itemName:CheckboxGroupResult){this.itemStatusitemName})Text(水果清单).margin({right:20}).fontSize(14).lineHeight(20).fontColor(#182431).fontWeight(FontWeight.Bold)}.margin({top:150})ForEach(this.flexNameList,(item:any){this.flexItem(item,fruit_list)})Button(删除).margin({top:20,left:35}).fontSize(15).padding({top:5,bottom:5,left:15,right:15}).onClick((){promptAction.showDialog({title:,message:确定删除吗,buttons:[{text:取消,color:#000000},{text:确定,color:#000000}]}).then(data{if(data.index1){for(letiofthis.itemStatus.name){this.flexNameList.splice(this.flexNameList.indexOf(i),1)}}})})}else{}}.alignItems(HorizontalAlign.Center)}}参考ChecckboxGroupCheckboxFlexButtonohos.promptAction (弹窗)ForEach循环渲染State状态管理Builder动态构建UI元素

相关新闻

珠宝展柜灯光为什么要求高显指?3000K和4000K差别大吗?

珠宝展柜灯光为什么要求高显指?3000K和4000K差别大吗?

珠宝展柜须用高显指灯光(CRI≥95),因为普通灯光会让珠宝失色——钻石火彩出不来,翡翠正阳绿发灰,黄金金色暗淡。色温3000K(暖黄光)适合黄金首饰,4000K(中性白光&#xff…

2026/7/30 14:45:13 阅读更多 →
【万字文档+源码】 基于springboot+vue大学生心理咨询平台-可用于毕设-课程设计-练手学习-学习资料分享

【万字文档+源码】 基于springboot+vue大学生心理咨询平台-可用于毕设-课程设计-练手学习-学习资料分享

基于springbootvue大学生心理咨询平台1. 项目概述 1.1 项目背景 当代大学生面临学业、就业、人际关系等多重压力,心理问题发生率逐年上升。传统线下心理咨询存在预约不便、隐私顾虑、宣传渠道单一等痛点。为搭建数字化心理健康服务渠道,本项目开发大学…

2026/7/31 15:58:26 阅读更多 →
涉密信息系统集成资质认定材料准备指南——核心清单与常见问题

涉密信息系统集成资质认定材料准备指南——核心清单与常见问题

摘要:涉密信息系统集成资质是企业进入涉密信息化项目领域的法定准入条件。材料准备是资质认定流程中的基础环节,材料不全、格式不符或内容不一致,是申报被退回或补正的主要原因。本文依据现行资质管理办法及受理窗口常见要求,系统…

2026/7/31 15:11:00 阅读更多 →

最新新闻

CM211-2电视盒子通刷固件实战:免拆卡刷与当贝桌面优化指南

CM211-2电视盒子通刷固件实战:免拆卡刷与当贝桌面优化指南

1. 项目背景与核心价值:为什么需要“通刷”固件?如果你手头有一台型号为CM211-2的运营商定制版电视盒子,大概率会和我当初一样,被它内置的臃肿系统搞得头疼。开机慢、广告多、预装应用无法卸载、存储空间告急,想装个自…

2026/7/31 15:58:16 阅读更多 →
清华西交大联手登上Nature子刊:Hyper-RAG用超图计算将大模型幻觉降低48%

清华西交大联手登上Nature子刊:Hyper-RAG用超图计算将大模型幻觉降低48%

← 行业趋势大语言模型(LLM)落地最大的拦路虎是什么?不是算力不够、不是参数量不够大,而是幻觉(hallucination)——模型一本正经地胡说八道。2026年5月,清华大学软件学院高跃团队联合西安交通大…

2026/7/31 15:58:16 阅读更多 →
Python列表查找全攻略:从in、index到性能优化与实战避坑

Python列表查找全攻略:从in、index到性能优化与实战避坑

1. 从“找东西”说起:为什么列表查找是Python的必修课我刚开始写Python那会儿,最常遇到的场景就是在一堆数据里找某个特定的值。比如,从一堆用户ID里找某个人的记录,或者在一长串日志条目里定位一个错误信息。那时候,我…

2026/7/31 15:58:16 阅读更多 →
Skills框架:通过校验重试机制提升AI输出稳定性与可预测性

Skills框架:通过校验重试机制提升AI输出稳定性与可预测性

上周在 GitHub 上看到一个项目,叫 Skills,作者是 Matt Pocock。点进去之前,我以为又是一个 AI 工具库,无非是把几个模型 API 封装一下,加点提示词模板。但仔细看完文档和代码结构后,我发现这个项目真正要解…

2026/7/31 15:58:16 阅读更多 →
猫抓浏览器扩展:一站式网页媒体资源嗅探下载终极指南

猫抓浏览器扩展:一站式网页媒体资源嗅探下载终极指南

猫抓浏览器扩展:一站式网页媒体资源嗅探下载终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到想保存网页上的精彩…

2026/7/31 15:58:16 阅读更多 →
Flowable流程引擎架构与核心表结构解析

Flowable流程引擎架构与核心表结构解析

1. Flowable流程引擎的核心架构解析Flowable作为一款轻量级业务流程引擎,其核心设计理念源于Activiti项目,但在性能优化和架构设计上做了大量改进。整个引擎的核心可以概括为"四大服务两大API"的架构模式。运行时服务(RuntimeServi…

2026/7/31 15:57:16 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻