当前位置: 首页 > news >正文

HarmonyOS6 ArkTS List 设置编辑模式

文章目录

    • 一、功能概述
    • 二、官方核心知识点
      • 1. 编辑模式实现原理
      • 2. 列表数据驱动
      • 3. 列表项操作
    • 三、完整可运行代码
    • 四、代码功能详解
      • 1. 编辑模式状态控制
      • 2. 编辑按钮切换
      • 3. 列表项动态显示删除按钮
      • 4. 删除列表项
      • 5. LazyForEach 高性能渲染
    • 五、运行效果
    • 总结

一、功能概述

List 编辑模式是应用开发中非常常用的交互功能,通过控制状态变量实现普通模式 / 编辑模式的自由切换。
进入编辑模式后,列表项侧滑/直接显示删除按钮,可对指定列表项执行删除操作,是官方推荐的列表编辑方案。

  • 核心能力:编辑模式切换、列表项删除、动态刷新列表
  • 核心组件:List+ListItem+LazyForEach
  • 适用场景:消息管理、文件管理、购物车、收藏列表等

二、官方核心知识点

1. 编辑模式实现原理

通过@State状态变量控制编辑UI(删除按钮)的显示与隐藏,实现模式切换。

2. 列表数据驱动

List 必须使用数据源(DataSource)管理数据,增删后通过reloadData()刷新列表,这是官方规范用法。

3. 列表项操作

ListItem内部嵌套删除按钮,点击后通过索引(index)删除对应数据。


三、完整可运行代码

// xxx.ets import { ListDataSource } from './ListDataSource'; @Entry @Component struct ListExample { arr: ListDataSource = new ListDataSource([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); @State editFlag: boolean = false; build() { Stack({ alignContent: Alignment.TopStart }) { Column() { List({ space: 20, initialIndex: 0 }) { LazyForEach(this.arr, (item: number, index?: number) => { ListItem() { Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) { Text('' + item) .width('100%') .height(80) .fontSize(20) .textAlign(TextAlign.Center) .borderRadius(10) .backgroundColor(0xFFFFFF) .flexShrink(1) if (this.editFlag) { Button() { Text('delete').fontSize(16) }.width('30%').height(40) .onClick(() => { if (index != undefined) { console.info(this.arr.getData(index) + 'Delete'); this.arr.deleteItem(index); this.arr.reloadData(); console.info(JSON.stringify(this.arr)); this.editFlag = false; } }).stateEffect(true) } } } }, (item: number, index: number) => item.toString() + index.toString()) }.width('90%') .scrollBar(BarState.Off) .friction(0.6) }.width('100%') Button('编辑列表') .onClick(() => { this.editFlag = !this.editFlag; }).margin({ top: 5, left: 20 }) }.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 }) } }

运行效果如图:

当点击编辑列表按钮:

删除3:


四、代码功能详解

1. 编辑模式状态控制

@State editFlag: boolean = false;
  • false:普通模式(隐藏删除按钮)
  • true:编辑模式(显示删除按钮)

2. 编辑按钮切换

点击「编辑列表」按钮切换编辑模式:

Button('编辑列表') .onClick(() => { this.editFlag = !this.editFlag; })

3. 列表项动态显示删除按钮

if (this.editFlag) { // 删除按钮 }

根据状态判断是否渲染删除按钮,符合官方条件渲染规范。

4. 删除列表项

this.arr.deleteItem(index); // 删除数据 this.arr.reloadData(); // 刷新列表 this.editFlag = false; // 退出编辑模式

严格遵循官方:先操作数据源 → 再刷新列表的流程。

5. LazyForEach 高性能渲染

官方推荐长列表渲染方式,配合数据源实现高效复用。


五、运行效果

  1. 初始为普通模式,只显示列表项
  2. 点击「编辑列表」进入编辑模式,每项右侧显示删除按钮
  3. 点击删除按钮 → 删除对应项 → 自动刷新列表 → 退出编辑模式
  4. 整体交互流畅,符合 HarmonyOS 设计规范

总结

  1. List 编辑功能必须基于数据源(DataSource)实现
  2. 数据删除后必须调用reloadData()刷新列表
  3. 使用@State管理编辑状态
  4. 删除操作必须判断 index 合法性
  5. 推荐使用LazyForEach渲染长列表

如果这篇文章对你有帮助,欢迎点赞、收藏、关注,你的支持是持续创作的动力!

http://www.cnnetsun.cn/news/1513855.html

相关文章:

  • ARM中断处理流程
  • RK3588 Android12开发板充电调试避坑实录:BQ25703地址写错,CW2017参数不对,我踩过的雷你别踩
  • 蛋白翻译后修饰绝对定量:如何精准剥离“蛋白表达量波动”与“假阳性信号”?
  • 跨平台哔哩哔哩工具箱BiliTools:如何高效管理你的B站内容库
  • RTT移植过程中一个不太注意的细节
  • C++15: pair 数对 —— 极简成对数据容器
  • 破解企业文档管理困局:从混乱到有序的全面革新方案
  • Oracle EBS 预算控制与保留款配置文档
  • 提示词+Skills=王炸!我靠这套组合拳让 AI 效率提升 10 倍(附完整案例)
  • YOLOv11涨点改进| 全网独家创新、检测头Head改进篇| CVPR 2026顶会 |使用FAAHead改进YOLOv11的检测头,处理小目标、遮挡小目标检测、旋转目标检测有效涨点,助力高效发论文
  • 从杂乱背景到专业直播间:OBS背景移除插件如何重塑你的视频创作体验
  • 颠覆传统翻译体验:3大技术突破让PDF文档翻译效率提升10倍
  • 告别龟速下载:用阿里云镜像源5分钟搞定CentOS 8 Stream + 宝塔面板环境
  • UOS嵌入式工具库:Arduino平台的极简API与EEPROM键值存储
  • Win11Debloat:系统减负与性能优化的全方位解决方案
  • Vue3 中使用 Proxy 的 8 个注意事项
  • Wan2.2-I2V在React前端项目中的集成应用
  • 开源模型落地实践:Qwen2.5-7B与vLLM结合,实现高效工具调用
  • STM32F746NG SDIO块设备驱动设计与实现
  • 3分钟开启你的AI角色扮演世界:SillyTavern终极入门指南
  • 3个技术颠覆:3D打印谐波减速器的Faze4开源机械臂低成本实践指南
  • Keil版本管理避坑指南:从C51到MDK,如何安全下载并管理多个历史版本?
  • 终极MP4视频修复指南:如何使用untrunc高效恢复损坏的媒体文件
  • vLLM-v0.17.1惊艳效果:Qwen2-7B在RTX 4090上达240 tokens/s
  • 项目经理必看:用Microsoft Project搞定关键路径计算(含资源冲突解决技巧)
  • S7-200plc和MCGS组态自动化搬运机械手的组系统设计 我们主要的后发送的产品有,带解释...
  • AnotherRedisDesktopManager:提升Redis管理效率的全方位解决方案
  • OpenClaw无GUI部署:ollama-QwQ-32B在服务器端的自动化应用
  • ollama-QwQ-32B指令集扩展:教OpenClaw理解新操作短语
  • 通义千问3-VL-Reranker-8B在学术论文检索中的创新应用:图表与正文的深度关联