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

HarmonyOS6 ArkTS 创建ListItem

文章目录

    • 1. 核心依赖与前提
      • 1.1 组件约束
      • 1.2 适用版本
    • 2. 完整标准代码:
    • 3. ListItem 创建与使用详解
      • 3.1 基础创建语法(核心)
      • 3.2 必须依赖的父容器
      • 3.3 结合 LazyForEach 批量创建(高性能方案)
      • 3.4 数据适配器(ListDataSource)作用
    • 4. ListItem 常用样式配置
      • 核心属性说明
    • 5. 运行效果
    • 总结

ListItem是列表布局的基础单元组件,必须嵌套在List容器中使用,用于展示列表中的单行内容,支持文本、图标、自定义布局、点击交互等场景,是应用开发中高频使用的基础组件。


1. 核心依赖与前提

1.1 组件约束

  • ListItem只能作为List的直接子组件,不可独立使用;
  • 配合LazyForEach实现大数据列表的懒加载优化;
  • 依赖IDataSource接口实现数据驱动列表渲染。

1.2 适用版本

HarmonyOS 6 / API 14及以上


2. 完整标准代码:

// xxx.ets // 1. 定义数据适配器,实现IDataSource接口 export class ListDataSource implements IDataSource { private list: number[] = []; constructor(list: number[]) { this.list = list; } // 获取列表总数据量 totalCount(): number { return this.list.length; } // 根据索引获取对应数据 getData(index: number): number { return this.list[index]; } // 注册数据变化监听 registerDataChangeListener(listener: DataChangeListener): void { } // 注销数据变化监听 unregisterDataChangeListener(listener: DataChangeListener): void { } } // 2. 页面组件:List + ListItem 标准使用 @Entry @Component struct ListItemExample { // 初始化数据源 private arr: ListDataSource = new ListDataSource([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); build() { Column() { // List容器配置:间距20,默认起始索引0 List({ space: 20, initialIndex: 0 }) { // 懒加载遍历数据,渲染ListItem LazyForEach(this.arr, (item: number) => { // ========== 核心:创建标准ListItem ========== ListItem() { Text('' + item) .width('100%') .height(100) .fontSize(16) .textAlign(TextAlign.Center) .borderRadius(10) .backgroundColor(0xFFFFFF) } }, (item: string) => item) }.width('90%') .scrollBar(BarState.Off) // 隐藏滚动条 }.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 }) } }

运行效果如图:


3. ListItem 创建与使用详解

3.1 基础创建语法(核心)

ListItem采用闭包语法创建,内部可包裹任意子组件(Text/Image/Row/Column等):

ListItem() { // 列表项内容(子组件) Text("列表项内容") }

这是ListItem最基础的创建方式,也是官方文档推荐的标准写法。

3.2 必须依赖的父容器

ListItem无法单独渲染,必须放在List组件内部:

List() { // 可创建多个ListItem ListItem() { Text("项1") } ListItem() { Text("项2") } }

3.3 结合 LazyForEach 批量创建(高性能方案)

在长列表场景中,使用LazyForEach+IDataSource实现按需渲染,避免性能损耗,这是鸿蒙开发的最佳实践:

  1. 遍历数据源this.arr
  2. 为每一条数据自动创建一个ListItem
  3. 第三个参数为唯一标识,优化渲染性能
LazyForEach(this.arr, (item: number) => { ListItem() { // 自定义列表项内容 } }, (item: string) => item)

3.4 数据适配器(ListDataSource)作用

实现IDataSource接口,为ListItem提供标准化数据:

  • totalCount():返回列表总项数,决定ListItem的创建数量
  • getData(index):根据索引返回对应数据,绑定到ListItem
  • 监听方法:用于数据更新时刷新列表(基础场景可空实现)

4. ListItem 常用样式配置

基于官方文档,ListItem支持丰富的样式定制,可直接在组件后链式调用属性,示例:

ListItem() { Text('' + item) } .width('100%') // 宽度 .height(100) // 高度 .backgroundColor(0xFFFFFF) // 背景色 .borderRadius(10) // 圆角 .padding(10) // 内边距 .onClick(() => { // 点击事件 console.log("点击列表项:" + item) })

核心属性说明

属性作用
width/height设置列表项宽高
backgroundColor设置背景颜色
borderRadius设置圆角
padding/margin设置内/外边距
onClick列表项点击交互
scrollBar配置列表滚动条(List属性)

5. 运行效果

  1. 页面展示灰色背景容器;
  2. 渲染10个白色圆角ListItem,垂直排列,间距20px;
  3. 每个列表项居中显示数字 0~9;
  4. 隐藏列表滚动条,界面简洁美观。

总结

ListItem是HarmonyOS列表布局的核心基础组件,标准创建流程为:

  1. 实现IDataSource数据适配器
  2. List容器中使用LazyForEach遍历数据
  3. 通过ListItem(){}闭包创建列表项

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

http://www.jsqmd.com/news/563385/

相关文章:

  • 小白也能做!我用Python写了一个带AI语音的美食菜单系统✨
  • 【OSG学习笔记】Day 22: StateSet 与 StateAttribute (渲染状态)
  • 你的音量滑块科学吗?从人耳听觉原理到PCM对数音量调节实战
  • 告别乱码:Matlab脚本中文注释编码冲突的实战排查与修复
  • B2B战略到营销分解实战:OGSM / 主题 / 内容 / 渠道 / 节奏五层框架
  • 麦克风效率革命:MicMute让静音操作提速90%的终极体验升级
  • 数据结构之队列(Queue)
  • Blender 3MF插件终极指南:轻松处理3D打印文件的完整教程
  • Yi-Coder-1.5B数据库管理实战:MySQL安装配置与优化
  • ARZOPA便携屏接电脑,频繁黑屏的问题解决
  • ssm+java2026年毕设停车场管理系统【源码+论文】
  • 如何用OpenRGB终结RGB灯光控制混乱:终极跨平台解决方案
  • DFRobot_SIM库解析:AT指令抽象层设计与嵌入式通信实践
  • Apache James邮件服务器:企业级邮件系统的构建与运维指南
  • 物联网项目-------配置模块以及XML,单例模式
  • Nano vLLM推理框架解析(schedule篇)
  • Qt|HTTP实战到工程落地(6):UploadData 文件上传实现
  • ITG-3200三轴陀螺仪驱动开发与嵌入式集成指南
  • 4个关键步骤:开源散热控制解决Dell G15温度难题
  • Maxwell2D结合origin导出时空径向力三维图与时空傅里叶三维分解图
  • 工业质检中的旋转目标检测:YOLOv8改进方案
  • 谈谈矛盾律和排中律中的“矛盾”
  • ssm+java2026年毕设体育网站前端设计【源码+论文】
  • 在Java中,如何在学生ID重复时停止后续代码执行
  • 基于模型预测控制的微电网多时间尺度协调优化调度方法
  • STM32环境监测系统在烟花爆竹仓库的应用
  • 猫抓插件终极指南:3分钟学会网页视频下载的完整教程
  • 【Web安全】iframe注入漏洞从入门到实战
  • Kurento Media Server与OpenVidu集成:打造企业级视频会议系统
  • 【OSG学习笔记】Day 23: ClipNode(动态裁剪)