回复
#我的鸿蒙开发手记#HarmonyOS ArkTS 组件进阶—ListItem 全面自学指南 原创 精华
李游LEO
发布于 2025-5-15 10:53
浏览
0收藏
一、ListItem 是什么?什么时候要用它?
在 ArkTS 里做 UI,如果你要展示一堆“有规律、可操作”的列表内容,比如待办清单、联系人、消息列表,ListItem 就是你的首选“列表单元格”组件。
注意:ListItem 只能配合 List 或 ListItemGroup 使用,自己单飞是没用的。
它最初从 API 7 支持到现在,功能越来越多,滑动删除、卡片样式、选中、多选、滑动操作……全都能玩,适合做复杂的业务型列表。
二、ListItem 的基本用法——最简单的案例入门
假如你就是想简单罗列一组内容,先来个最简版体验下:
@Entry
@Component
struct SimpleListDemo {
private items: string[] = ['鸿蒙', 'ArkTS', '组件', '自学指南']
build() {
Column() {
List({ space: 14 }) { // 控制item间距
ForEach(this.items, (item: string, idx: number) => {
ListItem() {
Text(`#${idx + 1}:${item}`)
.fontSize(17)
.width('100%')
.padding(12)
.backgroundColor(0xF7F7F7)
.borderRadius(8)
.margin({ bottom: 2 })
}
})
}
.width('92%')
.backgroundColor(0xE9E9EF)
.padding({ top: 10 })
}
.alignItems(HorizontalAlign.Center)
.height('100%')
}
}

几点说明:
- 列表元素就是ListItem,里面你想放啥都行,只能有一个直接子组件(可以是Row/Column/Text等)。
- 记得外层用List包起来,不然直接用 ListItem 会报错。
三、选中态/多选 & 高级交互(selected/selectable)
默认 ListItem 是能被鼠标框选的,如果想定制“选中”效果,可以用 selected 属性,双向绑定支持“点谁谁高亮”,适合做选择类的交互。
@Entry
@Component
struct SelectableListDemo {
@State selectedIdx: number = 0
private fruits: string[] = ['苹果', '香蕉', '橙子', '柚子']
build() {
Column() {
List({ space: 8 }) {
ForEach(this.fruits, (name: string, idx: number) => {
ListItem() {
Text(name)
.width('100%')
.fontSize(18)
.textAlign(TextAlign.Center)
.backgroundColor(this.selectedIdx === idx ? 0xFFF7D6 : 0xFFFFFF)
.padding(16)
}
.selected(this.selectedIdx === idx)
.onClick(() => {
this.selectedIdx = idx
})
})
}
.width('90%')
.border({ width: 1, color: 0xCCCCCC })
}
.width('100%').height('100%')
.alignItems(HorizontalAlign.Center)
}
}

技巧点:
- 用selected() + 自己控制的@State变量,交互逻辑清晰,且样式自定义方便。
- 也可以加 .multiSelectable(true) 实现多选,这里就不展开了。
四、进阶操作——滑动删除与自定义滑动区(swipeAction)
有时候你想加点“左滑删除、右滑更多”的体验?
ListItem 的 swipeAction 属性直接满足你,还能自定义滑动区的内容,想怎么组合都行。

实用建议:
- builder 区自定义内容很灵活,但最多只放一个组件,想放两个就包个 Row/Column。
- actionAreaDistance 控制滑到多少距离才触发长距离删除操作,建议不要设置得太小,不然容易误删。
- 建议配合 scroller 使用,能随时关闭所有滑动区。
五、ListItem 卡片样式的正确姿势
想要让你的 List 看起来更有“卡片感”?ListItem 支持内置卡片风格(ListItemStyle.CARD),但推荐和 ListItemGroup 组合用,这样布局更工整,视觉更统一。
@Entry
@Component
struct CardStyleListDemo {
build() {
Column() {
List({ space: 8 }) {
ListItemGroup({ style: ListItemGroupStyle.CARD }) {
ForEach(['一号', '二号', '三号'], (name: string, idx: number) => {
ListItem({ style: ListItemStyle.CARD }) {
Text(`卡片:${name}`)
.width('100%')
.fontSize(18)
.padding(18)
}
})
}
}
.width('95%')
.backgroundColor(0xEFF7FF)
.multiSelectable(true)
.padding({ top: 12 })
}
.alignItems(HorizontalAlign.Center)
.width('100%').height('100%')
}
}

特别提醒:
- 如果用卡片模式,List 的方向建议默认竖直,横向模式下卡片样式可能会乱掉。
- 配合 Group 的 Card 样式,列表分组、分割线、分区头都很容易做出来。
六、更多常用属性和小知识
- selectable():控制单个 ListItem 是否可被框选,默认是 true,业务需要时可以设为 false。
- onSelect():监听框选状态变化,用于做批量操作,比如批量删除、批量导出。
- swipeAction 下的 onAction/onEnterActionArea/onExitActionArea:做复杂交互时特别有用,比如滑动到某个区间提示用户“将要删除”。
- 老版属性如 sticky、editable 已废弃,不建议新项目再用,直接用 List 或 ListItemGroup 的新能力。
七、易错点和建议
- ListItem 只能直接放一个子组件,想放多个就用 Row/Column 包裹。
- 滑动区宽度别设太大,多列时容易出错,最佳是刚好覆盖主要操作区。
- selected 和样式要分开设置,只设置 selected 不会自动加样式,需要手动给背景色/边框等。
- 样式自定义用法灵活,ArkTS 支持高度/字体/圆角/阴影都可以自由组合,卡片效果可自己DIY。
八、结语:玩转 ListItem 的实战建议
ListItem 是 HarmonyOS ArkTS 里做列表交互的超级利器,不管你是做 ToDo、消息、商品列表还是自定义控件,只要用好 ListItem 的这些属性和玩法,绝大多数列表都能搞定。
- 建议优先用新接口(API10+)和枚举
- 多用 ListItemGroup 做分组、卡片,列表风格更统一
- 样式和交互大胆自定义,官方只给了底子,怎么花活还得靠你自己整
希望这份进阶指南能帮你扫清“用不顺手”“找不到用法”的各种坑!
最后你学习这个组件遇到了什么问题?欢迎留言一起讨论!
| 技术栈标签 | HarmonyOS 语言 |
|---|---|
| 行业标签 | 工具效率 |
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
已于2025-6-3 14:22:57修改
赞
收藏
回复
相关推荐




















