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

9.ArkUI List的介绍和使用

ArkUI List 组件详解与使用指南

List 是 ArkUI(HarmonyOS 开发框架)中用于展示长列表数据的高性能滚动容器组件。以下是 List 的详细介绍和使用方法。

基本介绍

List 组件特点:

  • 支持垂直/水平滚动
  • 高性能渲染(仅渲染可视区域内的项)
  • 支持多种布局方式
  • 内置多种滑动操作和交互效果

基本使用

1. 简单列表

@Entry
@Component
struct SimpleListExample {private data: string[] = ['Apple', 'Banana', 'Orange', 'Pear', 'Grape']build() {Column() {List({ space: 10 }) {ForEach(this.data, (item: string) => {ListItem() {Text(item).fontSize(20).width('100%').textAlign(TextAlign.Center).backgroundColor('#f0f0f0').padding(10)}}, (item: string) => item)}.width('100%').height('100%')}}
}

2. 复杂列表项

@Entry
@Component
struct ComplexListExample {private contacts = [{ name: '张三', phone: '13800138000', avatar: 'user1.png' },{ name: '李四', phone: '13900139000', avatar: 'user2.png' },// 更多数据...]build() {List({ space: 5 }) {ForEach(this.contacts, (contact) => {ListItem() {Row() {Image(contact.avatar).width(50).height(50).borderRadius(25)Column() {Text(contact.name).fontSize(18).fontWeight(FontWeight.Bold)Text(contact.phone).fontSize(14).fontColor('#666')}.margin({ left: 10 })}.width('100%').padding(10)}}, contact => contact.phone)}.width('100%').height('100%')}
}

核心功能

1. 列表方向

List() {// 列表项
}
.layoutDirection(Axis.Vertical) // 垂直列表(默认)List() {// 列表项
}
.layoutDirection(Axis.Horizontal) // 水平列表

2. 列表分隔线

List() {// 列表项
}
.divider({strokeWidth: 1,color: '#f0f0f0',startMargin: 20,endMargin: 20
})

3. 列表滚动控制

@State scroller: Scroller = new Scroller()build() {List({ scroller: this.scroller }) {// 列表项}// 滚动到指定位置Button('滚动到底部').onClick(() => {this.scroller.scrollTo({ x: 0, y: 1000 })})
}

4. 下拉刷新和上拉加载

@State isRefreshing: boolean = false
@State isLoadingMore: boolean = falsebuild() {List() {// 列表项}.onScrollIndex((start, end) => {// 滚动到接近底部时触发加载更多if (end >= this.data.length - 5) {this.loadMore()}}).refresh({refreshing: this.isRefreshing,onRefresh: () => {this.refreshData()}})
}private refreshData() {this.isRefreshing = true// 模拟异步请求setTimeout(() => {this.isRefreshing = false}, 1000)
}private loadMore() {if (this.isLoadingMore) returnthis.isLoadingMore = true// 模拟异步加载setTimeout(() => {// 添加新数据this.isLoadingMore = false}, 1000)
}

性能优化

1. 复用标识

ForEach(this.data, (item) => {ListItem() {// 内容}
}, (item) => item.id) // 提供唯一键提高复用效率

2. 懒加载

ListItem() {LazyForEach(this.dataSource, (item) => {// 列表项内容}, (item) => item.id)
}

3. 固定高度

ListItem() {// 内容
}
.height(80) // 指定固定高度提高性能

高级功能

1. 分组列表

@Entry
@Component
struct SectionListExample {private sections = [{title: 'A',data: ['Apple', 'Apricot', 'Avocado']},{title: 'B',data: ['Banana', 'Blackberry', 'Blueberry']}// 更多分组...]build() {List() {ForEach(this.sections, (section) => {ListItemGroup({ header: this.renderHeader(section.title) }) {ForEach(section.data, (item) => {ListItem() {Text(item).padding(10)}})}})}}@Builder renderHeader(title: string) {Text(title).fontSize(18).fontWeight(FontWeight.Bold).backgroundColor('#f0f0f0').width('100%').padding(10)}
}

2. 滑动操作

ListItem() {// 主内容
}
.swipeAction({ end: this.DeleteButton(),start: this.MarkButton() 
})@Builder DeleteButton() {Button('删除').width(80).height('100%').backgroundColor(Color.Red).onClick(() => {// 删除操作})
}@Builder MarkButton() {Button('标记').width(80).height('100%').backgroundColor(Color.Green).onClick(() => {// 标记操作})
}

最佳实践

  1. 避免复杂嵌套:减少列表项的嵌套层级
  2. 使用固定尺寸:尽可能为列表项指定固定高度/宽度
  3. 分页加载:大数据集采用分页加载
  4. 图片优化:使用缩略图或懒加载大图片
  5. 减少状态更新:避免频繁更新列表数据

通过合理使用 List 组件,可以构建出高性能、流畅滚动的列表界面。

http://www.xdnf.cn/news/2029.html

相关文章:

  • 云+AI双轮驱动,亚马逊云科技加速中国企业出海新浪潮
  • OCR定制识别:解锁文字识别的无限可能
  • Windows 安全设置不允许下载文件
  • SpringCloud基于Eureka和Feign实现一个微服务系统
  • Python----深度学习(基于深度学习Pytroch簇分类,圆环分类,月牙分类)
  • B站C语言课程笔记3
  • 《AI大模型趣味实战》基于RAG向量数据库的知识库AI问答助手设计与实现
  • 开发小程序后端用PHP好还是Java哪个好?
  • 【N8N】Docker Desktop + WSL 安装过程(Docker Desktop - WSL update Failed解决方法)
  • 大内存生产环境tomcat-jvm配置实践
  • 同一页面下动态加载内容的两种方式:AJAX与iframe
  • Git 进阶使用指南
  • 【深度强化学习 DRL 快速实践】策略梯度算法 (PG)
  • 图论---染色法(判断是否为二分图)
  • PH热榜 | 2025-04-25
  • 【物联网】基于LORA组网的远程环境监测系统设计(ThingsCloud云平台版)
  • Feign接口调用失败降级机制
  • 力扣DAY68 | 热100 | 寻找两个正序数组的中位数
  • 【数据可视化-33】病毒式社交媒体潮流与用户参与度可视化分析
  • 入侵检测系统(IDS)与入侵防御系统(IPS):功能对比与部署实践
  • QT开发技术【QT实现桌面右下角消息】
  • 通过模仿学习实现机器人灵巧操作:综述(上)
  • 使用 AutoGen 与 Elasticsearch
  • 6.ArkUI Row的介绍和使用
  • 笔记:记一次使用EasyExcel重写convertToExcelData方法无法读取@ExcelDictFormat注解的问题(已解决)
  • 计算机视觉各类任务评价指标详解
  • 8. 深入Spring AI:自定义Advisor
  • 反爬策略应对指南:淘宝 API 商品数据采集的 IP 代理与请求伪装技术
  • OceanBase 复合索引指南
  • 项目maven版本不一致 导致无法下载