HarmonyOS掌上记账APP开发实践第97篇:如何实现列表项的新增和删除![
如何实现列表项的新增和删除场景介绍列表的编辑模式用途十分广泛常见于待办事项管理、文件管理、备忘录的记录管理等应用场景。在列表的编辑模式下新增和删除列表项是最基础的功能其核心是对列表项对应的数据集合进行数据添加和删除。下面以待办事项管理为例介绍如何快速实现新增和删除列表项功能。新增列表项如下图所示当用户点击添加按钮时将弹出列表项选择界面用户点击确定后列表中新增对应项目。图 新增待办开发步骤定义列表项数据结构和初始化列表数据构建列表整体布局和列表项。以待办事项管理为例首先定义待办事项的数据结构importutilfromohos.util;exportclassToDo{key:stringutil.generateRandomUUID(true);name:string;constructor(name:string){this.namename;}}然后初始化待办事项列表和可选事项列表StatetoDoData:ToDo[][];privateavailableThings:string[][读书,运动,旅游,听音乐,看电影,唱歌];构建UI界面。初始界面包含“待办”和新增按钮“”Text(待办).fontSize(36).margin({left:40})Blank()Text().fontWeight(FontWeight.Lighter).fontSize(40).margin({right:30})构建列表布局并通过ForEach循环渲染列表项List({space:10}){ForEach(this.toDoData,(toDoItem){ListItem(){...}},toDoItemtoDoItem.key)}为新增按钮绑定点击事件并在事件中通过TextPickerDialog.show添加新增列表项的逻辑Text().onClick((){TextPickerDialog.show({range:this.availableThings,// 将可选事项列表配置到选择对话框中onAccept:(value:TextPickerResult){this.toDoData.push(newToDo(this.availableThings[value.index]));// 用户点击确认将选择的数据添加到待办列表toDoData中},})})删除列表项如下图所示当用户长按列表项进入删除模式时提供用户删除列表项选择的交互界面用户勾选完成后点击删除按钮列表中删除对应的项目。图18长按删除待办事项开发步骤列表的删除功能一般进入编辑模式后才可使用所以需要提供编辑模式的入口。以待办列表为例通过LongPressGesture()监听列表项的长按事件当用户长按列表项时进入编辑模式。// ToDoListItem.etsFlex({justifyContent:FlexAlign.SpaceBetween,alignItems:ItemAlign.Center}){...}.gesture(GestureGroup(GestureMode.Exclusive,LongPressGesture()// 监听长按事件.onAction((){if(!this.isEditMode){this.isEditModetrue;//进入编辑模式this.selectedItems.push(this.toDoItem);// 记录长按时选中的列表项}})))需要响应用户的选择交互记录要删除的列表项数据。在待办列表中通过勾选框的勾选或取消勾选响应用户勾选列表项变化记录所有选择的列表项。// ToDoListItem.etsif(this.isEditMode){Checkbox().onChange((isSelected){if(isSelected){this.selectedItems.push(this.toDoItem)// 勾选时记录选中的列表项}else{letindexthis.selectedItems.indexOf(this.toDoItem)if(index!-1){this.selectedItems.splice(index,1)// 取消勾选时则将此项从selectedItems中删除}}})...}需要响应用户点击删除按钮事件删除列表中对应的选项。// ToDoList.etsButton(删除).onClick((){// 删除选中的列表项对应的toDoData数据letleftDatathis.toDoData.filter((item){returnthis.selectedItems.find((selectedItem)selectedItem!item);})this.toDoDataleftData;this.isEditModefalse;})...完整示例代码新增和删除列表项的实现共涉及三个文件各文件完整代码如下待办事项数据结构代码ToDo.ets// ToDo.etsimportutilfromohos.util;exportclassToDo{key:stringutil.generateRandomUUID(true)name:string;constructor(name:string){this.namename;}}待办事项列表代码ToDoList.ets// ToDoList.etsimport{ToDo}from../model/ToDo;import{ToDoListItem}from./ToDoListItem;EntryComponentstruct ToDoList{StatetoDoData:ToDo[][]Watch(onEditModeChange)StateisEditMode:booleanfalseStateselectedItems:ToDo[][]privateavailableThings:string[][读书,运动,旅游,听音乐,看电影,唱歌]saveData(value:string){this.toDoData.push(newToDo(value))}onEditModeChange(){if(!this.isEditMode){this.selectedItems[]}}build(){Column(){Row(){if(this.isEditMode){Text(X).fontSize(20).onClick((){this.isEditModefalse;}).margin({left:20,right:20})Text(已选择this.selectedItems.length项).fontSize(24)}else{Text(待办).fontSize(36).margin({left:40})Blank()Text().fontWeight(FontWeight.Lighter).fontSize(40).margin({right:30}).onClick((){TextPickerDialog.show({range:this.availableThings,onAccept:(value:TextPickerResult){this.toDoData.push(newToDo(this.availableThings[value.index]))console.info(to do data: JSON.stringify(this.toDoData))},})})}}.height(12%).width(100%)List({initialIndex:0,space:10}){ForEach(this.toDoData,toDoItem{ListItem(){ToDoListItem({isEditMode:$isEditMode,toDoItem:toDoItem,selectedItems:$selectedItems})}.padding({left:24,right:24,bottom:12})},toDoItemtoDoItem.key)}.height(73%).listDirection(Axis.Vertical).edgeEffect(EdgeEffect.Spring)if(this.isEditMode){Row(){Button(删除).width(80%).onClick((){letleftDatathis.toDoData.filter((item){returnthis.selectedItems.find((selectedItem)selectedItem!item)})console.log(leftData: leftData);this.isEditModefalse;this.toDoDataleftData;}).backgroundColor(#ffd75d5d)}.height(15%)}}.backgroundColor(#fff1f3f5).width(100%).height(100%)}}待办事项代码ToDoListItem.ets// ToDoListItem.etsimport{ToDo}from../model/ToDo;Componentexportstruct ToDoListItem{LinkisEditMode:booleanLinkselectedItems:ToDo[]privatetoDoItem:ToDo;hasBeenSelected():boolean{returnthis.selectedItems.indexOf(this.toDoItem)!-1}build(){Flex({justifyContent:FlexAlign.SpaceBetween,alignItems:ItemAlign.Center}){Row({space:4}){Circle().width(24).height(24).fill(Color.White).borderWidth(3).borderRadius(30).borderColor(#ffdcdfdf).margin({right:10})Text(${this.toDoItem.name}).maxLines(1).fontSize(24).textOverflow({overflow:TextOverflow.Ellipsis})}.padding({left:12})if(this.isEditMode){Checkbox().select(this.hasBeenSelected()?true:false).onChange((isSelected){if(isSelected){this.selectedItems.push(this.toDoItem)}else{letindexthis.selectedItems.indexOf(this.toDoItem)if(index!-1){this.selectedItems.splice(index,1)}}}).width(24).height(24)}}.width(100%).height(80).padding({left:16,right:12,top:4,bottom:4}).borderRadius(24).linearGradient({direction:GradientDirection.Right,colors:this.hasBeenSelected()?[[0xffcdae,0.0],[0xFfece2,1.0]]:[[0xffffff,0.0],[0xffffff,1.0]]}).gesture(GestureGroup(GestureMode.Exclusive,LongPressGesture().onAction((){if(!this.isEditMode){this.isEditModetruethis.selectedItems.push(this.toDoItem)}})))}}

相关新闻

终极Chrome书签管理指南:3步告别混乱收藏夹

终极Chrome书签管理指南:3步告别混乱收藏夹

终极Chrome书签管理指南:3步告别混乱收藏夹 【免费下载链接】neat-bookmarks A neat bookmarks tree popup extension for Chrome [DISCONTINUED] 项目地址: https://gitcode.com/gh_mirrors/ne/neat-bookmarks 你是否曾在数百个杂乱的书签中迷失方向&#x…

2026/7/29 22:34:31 阅读更多 →
大模型时代的效果评估已失效?——基于178个LLM微调案例的评估范式迁移报告(内部白皮书节选)

大模型时代的效果评估已失效?——基于178个LLM微调案例的评估范式迁移报告(内部白皮书节选)

更多请点击: https://codechina.net 第一章:大模型时代效果评估范式的根本性危机 当百亿参数模型在零样本任务上超越人类基准,传统评估范式正遭遇前所未有的合法性挑战。BLEU、ROUGE、F1等基于词元匹配与统计对齐的指标,无法捕捉…

2026/7/29 22:34:31 阅读更多 →
大语文时代,拼的不只是课本知识!这款App帮孩子悄悄积累文学常识

大语文时代,拼的不只是课本知识!这款App帮孩子悄悄积累文学常识

大语文时代,考验的到底是什么? 你有没有发现,现在的语文考试越来越"不讲武德"了? 课文里学的是《司马光砸缸》,考试考的是"负荆请罪出自哪个历史典故";课文里学的是《静夜思》&#xf…

2026/7/29 22:34:31 阅读更多 →

最新新闻

Python数据大学生抑郁分析与预测123(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

Python数据大学生抑郁分析与预测123(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

Python数据大学生抑郁分析与预测123(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ 项目亮点: ✅ 完整项目:包含数据清洗、可视化分析、建模预测全流程 ✅ 真实数据集:基于大学生心理健康调查数据&#xff0…

2026/7/29 22:41:34 阅读更多 →
深度学习图像数据挖掘文档 《垃圾图像自动分类》 3124(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

深度学习图像数据挖掘文档 《垃圾图像自动分类》 3124(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

深度学习图像数据挖掘文档 《垃圾图像自动分类》 3124(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ 模型采用Inception V3 包括代码报告数据

2026/7/29 22:41:34 阅读更多 →
Elasticsearch Inquisitor vs Kibana:两款查询调试工具的全方位对比

Elasticsearch Inquisitor vs Kibana:两款查询调试工具的全方位对比

Elasticsearch Inquisitor vs Kibana:两款查询调试工具的全方位对比 【免费下载链接】elasticsearch-inquisitor Site plugin for Elasticsearch to help understand and debug queries. 项目地址: https://gitcode.com/gh_mirrors/el/elasticsearch-inquisitor …

2026/7/29 22:41:34 阅读更多 →
免费FDTD电磁仿真终极指南:从零开始掌握Meep光子学模拟

免费FDTD电磁仿真终极指南:从零开始掌握Meep光子学模拟

免费FDTD电磁仿真终极指南:从零开始掌握Meep光子学模拟 【免费下载链接】meep free finite-difference time-domain (FDTD) software for electromagnetic simulations 项目地址: https://gitcode.com/gh_mirrors/me/meep 你是否正在寻找一款功能强大且完全免…

2026/7/29 22:41:34 阅读更多 →
5分钟快速上手Locale Remulator:终极64位区域语言模拟器解决方案

5分钟快速上手Locale Remulator:终极64位区域语言模拟器解决方案

5分钟快速上手Locale Remulator:终极64位区域语言模拟器解决方案 【免费下载链接】Locale_Remulator System Region and Language Simulator. 项目地址: https://gitcode.com/gh_mirrors/lo/Locale_Remulator 你是否曾经因为日韩游戏显示乱码而烦恼&#xff…

2026/7/29 22:41:34 阅读更多 →
Nebula Console实战指南:解锁图数据库命令行操作技巧

Nebula Console实战指南:解锁图数据库命令行操作技巧

Nebula Console实战指南:解锁图数据库命令行操作技巧 【免费下载链接】nebula-console Command line interface for the Nebula Graph service 项目地址: https://gitcode.com/gh_mirrors/ne/nebula-console 想要高效操作图数据库吗?Nebula Conso…

2026/7/29 22:40:33 阅读更多 →

日新闻

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:00:23 阅读更多 →
AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 在上一期「AI编程系列」中,我们学习了如何构建一个基础的 AI 问答系统,通过简单的输入输出让模型回应问题。但现实世界中的 AI 应用往往需要处理更复杂的场景:…

2026/7/29 0:00:23 阅读更多 →
AI智能体开发实战:从工具调用到企业级部署

AI智能体开发实战:从工具调用到企业级部署

1. 从被动问答到主动执行:AI Agent的范式转变过去两年,大语言模型最显著的应用形态是聊天机器人——用户提问,AI回答。但真正的生产力革命发生在2023年下半年:当AI学会主动调用工具完成任务时,生产力工具的历史被彻底改…

2026/7/29 0:00:23 阅读更多 →

周新闻

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

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

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

2026/7/29 22:18:20 阅读更多 →
深度学习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/29 15:00:03 阅读更多 →

月新闻