
回复
在 ArkTS 里做 UI,如果你要展示一堆“有规律、可操作”的列表内容,比如待办清单、联系人、消息列表,ListItem 就是你的首选“列表单元格”组件。
注意:ListItem 只能配合 List 或 ListItemGroup 使用,自己单飞是没用的。
它最初从 API 7 支持到现在,功能越来越多,滑动删除、卡片样式、选中、多选、滑动操作……全都能玩,适合做复杂的业务型列表。
假如你就是想简单罗列一组内容,先来个最简版体验下:
@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 是能被鼠标框选的,如果想定制“选中”效果,可以用 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)
}
}
技巧点:
有时候你想加点“左滑删除、右滑更多”的体验?
ListItem 的 swipeAction 属性直接满足你,还能自定义滑动区的内容,想怎么组合都行。
实用建议:
想要让你的 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%')
}
}
ListItem 是 HarmonyOS ArkTS 里做列表交互的超级利器,不管你是做 ToDo、消息、商品列表还是自定义控件,只要用好 ListItem 的这些属性和玩法,绝大多数列表都能搞定。
希望这份进阶指南能帮你扫清“用不顺手”“找不到用法”的各种坑!
最后你学习这个组件遇到了什么问题?欢迎留言一起讨论!
技术栈标签 | HarmonyOS 语言 |
---|---|
行业标签 | 工具效率 |