HarmonyOSNext列表开发指南

63 阅读3分钟

HarmonyOSNext列表开发指南 ##Harmony OS Next ##Ark Ts ##教育 本文适用于教育科普行业进行学习,有错误之处请指出我会修改。

🎯 列表基础:你的数据管家 列表就像 ​​智能收纳盒​​!内容太多时自动滚动,超适合展示: • 通讯录 👥 • 音乐歌单 🎵 • 购物车 🛒 • 新闻流 📰 ✨ 核心超能力

xxxxxxxxxx

List() {

// 三种姿势任你选 ↓↓↓

ListItem()     // 单个元素

ForEach(...)   // 循环渲染

ListItemGroup() // 分组显示

}

.scrollBar(BarState.Auto) // 自动滚动条

🧭 布局与约束:方向感很重要! 📏 主轴 vs 交叉轴 列表类型 主轴方向 交叉轴方向 示例场景 垂直列表 垂直 ↓ 水平 → 朋友圈动态 水平列表 水平 → 垂直 ↓ 电影海报墙 ⚡ 黄金法则 主轴尺寸不够时自动撑开,超过父容器就截断! 交叉轴默认占满父容器(想改?看这里 ↓↓↓)

🛠️ 开发四步曲 1️⃣ 设置滚动方向

xxxxxxxxxx

// 默认垂直滚动(不用写参数)

List() { ... }

// 水平滚动超简单!

List() { ... }

.listDirection(Axis.Horizontal) // ← 关键参数

2️⃣ 多列布局神器

xxxxxxxxxx

// 两列垂直列表

List() { ... }

.lanes(2) // 🎯 自适应列数

.alignListItem(ListItemAlign.Center) // 居中对齐

💡 超实用技巧lanes: {minLength:200, maxLength:300} 自动适配不同屏幕! 平板秒变两列,手机单列显示~

🎮 动态数据绑定:告别重复代码! 联系人列表实战

xxxxxxxxxx

// 数据类

class Contact {

key: string = util.generateRandomUUID(true);

name: string;

avatar: Resource; // 头像资源

}

// 列表组件

@Entry

@Component

struct ContactsList {

@State contacts: Contact[] = [

  new Contact("小明", $r("app.media.avatar1")),

  new Contact("小红", $r("app.media.avatar2"))

]

build() {

  List() {

    ForEach(this.contacts, (item) => {

      ListItem() {

        Row() {

          Image(item.avatar) // 头像

            .width(40).height(40).margin(10)

          Text(item.name).fontSize(20) // 名字

        }

      }

    })

  }

}

}

💅 颜值即正义:样式美颜指南 1️⃣ 添加分隔线

xxxxxxxxxx

List() { ... }

.divider({

strokeWidth: 1,         // 线宽

startMargin: 60,       // 左边距

endMargin: 10,         // 右边距

color: '#F0F0F0'       // 颜色

})

2️⃣ 小红点标记

xxxxxxxxxx

ListItem() {

Badge({

  count: 3,

  position: BadgePosition.RightTop,

  style: { badgeSize: 16, badgeColor: '#FF3366' }

}) {

  Image('message_icon.png')

}

}

🚀 进阶功能:秀到飞起! 1️⃣ 粘性标题(通讯录必备)

xxxxxxxxxx

List() {

ForEach(groups, (group) => {

  ListItemGroup({ header: this.renderHeader(group.title) }) {

    // 分组内容...

  }

})

}

.sticky(StickyStyle.Header) // 🎯 关键代码

2️⃣ 侧滑删除(微信同款)

xxxxxxxxxx

ListItem()

.swipeAction({

end: {

  builder: () => {

    Button('删除')

      .backgroundColor('#FF3B30')

      .onClick(() => { /* 删除逻辑 */ })

  }

}

})

3️⃣ 滚动条:智能显隐 List() { ... } .scrollBar(BarState.Auto) // 触摸时出现,2秒后自动隐藏

🚀 API10+ 默认开启,老项目记得检查兼容性!

🎪 高级定制功能 分组列表:像整理文件夹 // 分组头部组件 @Builder groupHeader(title: string) { Text(title) .fontSize(18) .backgroundColor('#F5F5F5') .padding(10) }

List() { ListItemGroup({ header: this.groupHeader('好友') }) { // 好友列表项... } ListItemGroup({ header: this.groupHeader('同事') }) { // 同事列表项... } }

滚动控制:瞬间移动! private scroller = new Scroller()

// 绑定滚动控制器 List({ scroller: this.scroller }) { ... }

// 一键回顶部 Button('↑').onClick(() => { this.scroller.scrollToIndex(0) // 跳转到第一个项 })

下拉刷新:数据实时更新 // 推荐使用Refresh组件 Refresh({ refreshing: false }) { List() { ... } } .onStateChange((refreshStatus: RefreshStatus) => { // 处理刷新逻辑 })

🛠️ 编辑模式秘籍 1️⃣ 长按进入编辑模式 ListItem() .gesture( LongPressGesture() .onAction(() => { this.isEditMode = true // 开启编辑模式 }) )

2️⃣ 批量删除操作 // 勾选多项 Checkbox() .onChange((checked) => { if (checked) selectedItems.push(item) else selectedItems.remove(item) })

// 删除全部选中项 Button('删除').onClick(() => { this.data = this.data.filter(item => !selectedItems.includes(item)) })

性能优化指南 懒加载 + 缓存策略 List() { LazyForEach(this.bigData, (item) => { ListItem() { ... } }) } .cachedCount(5) // 缓存前后5项 📊 缓存策略对比 模式 优点 缺点 循环渲染 实现简单 内存占用高 懒加载 内存优化 需要处理缓存逻辑

🎁 总结表格:一图掌握所有API 功能 核心API 应用场景 分隔线 .divider() 列表项视觉分割 粘性标题 .sticky() 通讯录/分类导航 侧滑操作 .swipeAction() 消息列表删除 滚动控制 Scroller 快速跳转定位 现在就动手打造你的专属列表吧! 🚀 遇到问题随时回来查表~

📚 速查表:一图流总结 功能 关键API 应用场景 多列布局 .lanes() 商品列表/相册 分组展示 ListItemGroup 通讯录/分类导航 滚动控制 Scroller 返回顶部/快速跳转 侧滑交互 .swipeAction() 消息列表删除 懒加载优化 LazyForEach+cachedCount 超长列表渲染

🎉 现在就去打造你的专属列表吧!有问题随时回来查~ 👉 ​​小作业​​:试着用List实现一个电影排行榜,带评分星星⭐️和分隔线!