1# ListItem
2
3用来展示列表具体item,必须配合List来使用。
4
5> **说明:**
6>
7> - 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8> - 该组件的父组件只能是[List](ts-container-list.md)或者[ListItemGroup](ts-container-listitemgroup.md)。
9> - 当ListItem配合LazyForEach使用时,ListItem子组件在ListItem创建时创建。配合if/else、ForEach使用时,或父组件为List/ListItemGroup时,ListItem子组件在ListItem布局时创建。
10
11## 子组件
12
13可以包含单个子组件。
14
15## 接口
16
17### ListItem<sup>10+</sup>
18
19ListItem(value?: ListItemOptions)
20
21**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
22
23**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
24
25**系统能力:** SystemCapability.ArkUI.ArkUI.Full
26
27**参数:**
28
29| 参数名 | 类型                                      | 必填 | 说明                                                     |
30| ------ | --------------------------------------------- | ---- | ------------------------------------------------------------ |
31| value  | [ListItemOptions](#listitemoptions10对象说明) | 否   | 为ListItem提供可选参数, 该对象内含有ListItemStyle枚举类型的style参数。 |
32
33### ListItem<sup>(deprecated)</sup>
34
35ListItem(value?: string)
36
37从API version 10开始, 该接口不再维护,推荐使用[ListItem<sup>10+</sup>](#listitem10)。
38
39**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
40
41**系统能力:** SystemCapability.ArkUI.ArkUI.Full
42
43**参数:**
44
45| 参数名 | 类型                      | 必填 | 说明 |
46| ------ | ----------------------------- | ---- | -------- |
47| value  | string | 否   | 无       |
48
49## 属性
50
51除支持[通用属性](ts-universal-attributes-size.md)外,还支持以下属性:
52
53### sticky<sup>(deprecated)</sup>
54
55sticky(value: Sticky)
56
57设置ListItem吸顶效果。
58
59从API version9开始废弃不再使用,推荐使用[List组件sticky属性](ts-container-list.md#sticky9)。
60
61**系统能力:** SystemCapability.ArkUI.ArkUI.Full
62
63**参数:**
64
65| 参数名 | 类型                                | 必填 | 说明                                       |
66| ------ | ----------------------------------- | ---- | ------------------------------------------ |
67| value  | [Sticky](#stickydeprecated枚举说明) | 是   | ListItem吸顶效果。<br/>默认值:Sticky.None |
68
69### editable<sup>(deprecated)</sup>
70
71editable(value: boolean | EditMode)
72
73设置当前ListItem元素是否可编辑,进入编辑模式后可删除或移动列表项。
74
75从API version9开始废弃不再使用,无替代接口。
76
77**系统能力:** SystemCapability.ArkUI.ArkUI.Full
78
79**参数:**
80
81| 参数名 | 类型                                                         | 必填 | 说明                                       |
82| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------ |
83| value  | boolean&nbsp;\|&nbsp;[EditMode](#editmodedeprecated枚举说明) | 是   | ListItem元素是否可编辑。<br/>默认值:false |
84
85### selectable<sup>8+</sup>
86
87selectable(value: boolean)
88
89设置当前ListItem元素是否可以被鼠标框选。外层List容器的鼠标框选开启时,ListItem的框选才生效。
90
91**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
92
93**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
94
95**系统能力:** SystemCapability.ArkUI.ArkUI.Full
96
97**参数:**
98
99| 参数名 | 类型    | 必填 | 说明                                              |
100| ------ | ------- | ---- | ------------------------------------------------- |
101| value  | boolean | 是   | ListItem元素是否可以被鼠标框选。<br/>默认值:true |
102
103### selected<sup>10+</sup>
104
105selected(value: boolean)
106
107设置当前ListItem选中状态。该属性支持[$$](../../../quick-start/arkts-two-way-sync.md)双向绑定变量。该属性需要在设置[选中态样式](./ts-universal-attributes-polymorphic-style.md)前使用才能生效选中态样式。
108
109**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
110
111**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
112
113**系统能力:** SystemCapability.ArkUI.ArkUI.Full
114
115**参数:**
116
117| 参数名 | 类型    | 必填 | 说明                                     |
118| ------ | ------- | ---- | ---------------------------------------- |
119| value  | boolean | 是   | 当前ListItem选中状态。<br/>默认值:false |
120
121### swipeAction<sup>9+</sup>
122
123swipeAction(value: SwipeActionOptions)
124
125用于设置ListItem的划出组件。
126
127**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
128
129**系统能力:** SystemCapability.ArkUI.ArkUI.Full
130
131**参数:**
132
133| 参数名 | 类型                                              | 必填 | 说明                 |
134| ------ | ------------------------------------------------- | ---- | -------------------- |
135| value  | [SwipeActionOptions](#swipeactionoptions9对象说明) | 是   | ListItem的划出组件。 |
136
137## Sticky<sup>(deprecated)</sup>枚举说明
138从API version9开始废弃不再使用,推荐使用[List组件stickyStyle枚举](ts-container-list.md#stickystyle9枚举说明)。
139
140**系统能力:** SystemCapability.ArkUI.ArkUI.Full
141
142| 名称 | 值 | 说明 |
143| -------- | -------- | -------- |
144| None |  0  | 无吸顶效果。 |
145| Normal |  1  | 当前item吸顶。 |
146| Opacity |  2  | 当前item吸顶显示透明度变化效果。 |
147
148## EditMode<sup>(deprecated)</sup>枚举说明
149从API version9开始废弃不再使用,无替代接口。
150
151**系统能力:** SystemCapability.ArkUI.ArkUI.Full
152
153| 名称     | 值 | 说明      |
154| ------ | ------ | --------- |
155| None   |  0  | 编辑操作不限制。    |
156| Deletable |  1  | 可删除。 |
157| Movable |  2  | 可移动。 |
158
159## SwipeEdgeEffect<sup>9+</sup>枚举说明
160
161**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
162
163**系统能力:** SystemCapability.ArkUI.ArkUI.Full
164
165| 名称     | 值 | 说明      |
166| ------ | ------ | --------- |
167|   Spring   |    0    | ListItem划动距离超过划出组件大小后可以继续划动。<br>如果设置了删除区域,ListItem划动距离超过删除阈值后可以继续划动,<br/>松手后按照弹簧阻尼曲线回弹。 |
168|   None   |    1    | ListItem划动距离不能超过划出组件大小。<br>如果设置了删除区域,ListItem划动距离不能超过删除阈值,<br/>并且在设置删除回调的情况下,达到删除阈值后松手触发删除回调。 |
169
170## SwipeActionOptions<sup>9+</sup>对象说明
171
172start和end对应的@builder函数中顶层必须是单个组件,不能是if/else、ForEach、LazyForEach语句。
173
174滑动手势只在listItem区域上,如果子组件划出ListItem区域外,在ListItem以外部分不会响应划动手势。所以在多列模式下,建议不要将划出组件设置太宽。
175
176**系统能力:** SystemCapability.ArkUI.ArkUI.Full
177
178| 名称                         | 类型                                                         | 必填 | 说明                                                         |
179| ---------------------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
180| start                        | [CustomBuilder](ts-types.md#custombuilder8)&nbsp;\|&nbsp;[SwipeActionItem](#swipeactionitem10对象说明) | 否   | ListItem向右划动时item左边的组件(List垂直布局时)或ListItem向下划动时item上方的组件(List水平布局时)。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
181| end                          | [CustomBuilder](ts-types.md#custombuilder8)&nbsp;\|&nbsp;[SwipeActionItem](#swipeactionitem10对象说明) | 否   | ListItem向左划动时item右边的组件(List垂直布局时)或ListItem向上划动时item下方的组件(List水平布局时)。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
182| edgeEffect                   | [SwipeEdgeEffect](#swipeedgeeffect9枚举说明)                 | 否   | 滑动效果。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。                                                |
183| onOffsetChange<sup>11+</sup> | (offset: number) => void                                     | 否   | 滑动操作偏移量更改时调用。 <br/>**说明:** <br/> 当列表项向左或向右滑动(当列表方向为“垂直”时),向上或向下滑动(当列方向为“水平”时)位置发生变化触发,以vp为单位。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
184
185## SwipeActionItem<sup>10+</sup>对象说明
186
187List垂直布局,ListItem向右滑动,item左边的长距离滑动删除选项或向左滑动时,item右边的长距离滑动删除选项。
188</br>List水平布局,ListItem向上滑动,item下边的长距离滑动删除选项或向下滑动时,item上边的长距离滑动删除选项。
189
190**系统能力:** SystemCapability.ArkUI.ArkUI.Full
191
192| 名称                 | 类型                                                     | 必填 | 说明                                                         |
193| -------------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
194| actionAreaDistance | [Length](ts-types.md#length) | 否 | 设置组件长距离滑动删除距离阈值。<br/>默认值:56vp <br/>**说明:** <br/>不支持设置百分比。<br/>删除距离阈值大于item宽度减去划出组件宽度,或删除距离阈值小于等于0就不会设置删除区域。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
195| onAction | () => void | 否 | 组件进入长距删除区后删除ListItem时调用,进入长距删除区后抬手时触发。<br/>**说明:** <br/> 滑动后松手的位置超过或等于设置的距离阈值,并且设置的距离阈值有效时才会触发。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
196| onEnterActionArea | () => void | 否 | 在滑动条目进入删除区域时调用,只触发一次,当再次进入时仍触发。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
197| onExitActionArea | () => void | 否 |当滑动条目退出删除区域时调用,只触发一次,当再次退出时仍触发。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
198| builder |  [CustomBuilder](ts-types.md#custombuilder8) | 否 |当列表项向左或向右滑动(当列表方向为“垂直”时),向上或向下滑动(当列方向为“水平”时)时显示的操作项。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
199| onStateChange<sup>11+</sup> | (state:[SwipeActionState](#swipeactionstate11枚举说明)) => void | 否 |当列表项滑动状态变化时候触发。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
200## ListItemOptions<sup>10+</sup>对象说明
201
202**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
203
204**系统能力:** SystemCapability.ArkUI.ArkUI.Full
205
206| 名称  | 类型                                  | 必填 | 说明                                                         |
207| ----- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
208| style | [ListItemStyle](#listitemstyle10枚举说明) | 否   | 设置List组件卡片样式。<br/>默认值: ListItemStyle.NONE<br/>设置为ListItemStyle.NONE时无样式。<br/>设置为ListItemStyle.CARD时,建议配合[ListItemGroup](ts-container-listitemgroup.md)的ListItemGroupStyle.CARD同时使用,显示默认卡片样式。  <br/>卡片样式下,ListItem默认规格:高度48vp,宽度100%,左右内边距8vp。如果需要实现ListItem高度自适应,可以把height设置为undefined。<br/>卡片样式下, 为卡片内的列表选项提供了默认的focus、hover、press、selected和disable样式。<br/>**说明:**<br/>当前卡片模式下,使用默认Axis.Vertical排列方向,如果listDirection属性设置为Axis.Horizontal,会导致显示混乱;List属性alignListItem默认为ListItemAlign.Center,居中对齐显示。 |
209
210## ListItemStyle<sup>10+</sup>枚举说明
211
212**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
213
214**系统能力:** SystemCapability.ArkUI.ArkUI.Full
215
216| 名称 | 值  | 说明             |
217| ---- | ---- | ------------------ |
218| NONE | 0 | 无样式。           |
219| CARD | 1 | 显示默认卡片样式。 |
220
221## SwipeActionState<sup>11+</sup>枚举说明
222
223**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
224
225**系统能力:** SystemCapability.ArkUI.ArkUI.Full
226
227| 名称      | 值     | 说明                                                       |
228| --------- | --------- | ------------------------------------------------------------ |
229| COLLAPSED | 0 | 收起状态,当ListItem向左或向右滑动(当列表方向为“垂直”时),<br/>向上或向下滑动(当列方向为“水平”时)时操作项处于隐藏状态。 |
230| EXPANDED  | 1 | 展开状态,当ListItem向左或向右滑动(当列表方向为“垂直”时),<br/>向上或向下滑动(当列方向为“水平”时)时操作项处于显示状态。<br/>**说明:**<br/>需要ListItem设置向左或向右滑动(当列表方向为“垂直”时),<br/>向上或向下滑动(当列方向为“水平”时)时显示的操作项。 |
231| ACTIONING | 2 | 长距离状态,当ListItem进入长距删除区后删除ListItem的状态。<br/>**说明**:<br/>滑动后松手的位置超过或等于设置的距离阈值,并且设置的距离阈值有效时才能进入该状态。 |
232
233## 事件
234
235### onSelect<sup>8+</sup>
236
237onSelect(event:&nbsp;(isSelected:&nbsp;boolean)&nbsp;=&gt;&nbsp;void)
238
239ListItem元素被鼠标框选的状态改变时触发回调。
240
241**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
242
243**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
244
245**系统能力:** SystemCapability.ArkUI.ArkUI.Full
246
247**参数:**
248
249| 参数名     | 类型    | 必填 | 说明                                                         |
250| ---------- | ------- | ---- | ------------------------------------------------------------ |
251| isSelected | boolean | 是   | 进入鼠标框选范围即被选中返回true,&nbsp;移出鼠标框选范围即未被选中返回false。 |
252
253## 示例
254
255### 示例1(创建ListItem)
256该实例实现了创建ListItem的基本用法。
257
258```ts
259// xxx.ets
260@Entry
261@Component
262struct ListItemExample {
263  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
264
265  build() {
266    Column() {
267      List({ space: 20, initialIndex: 0 }) {
268        ForEach(this.arr, (item: number) => {
269          ListItem() {
270            Text('' + item)
271              .width('100%')
272              .height(100)
273              .fontSize(16)
274              .textAlign(TextAlign.Center)
275              .borderRadius(10)
276              .backgroundColor(0xFFFFFF)
277          }
278        }, (item: string) => item)
279      }.width('90%')
280      .scrollBar(BarState.Off)
281    }.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 })
282  }
283}
284```
285
286![zh-cn_image_0000001219864159](figures/zh-cn_image_0000001219864159.gif)
287
288### 示例2(设置划出组件)
289该示例展示了ListItem设置了swipeAction的横滑效果。
290
291```ts
292// xxx.ets
293@Entry
294@Component
295struct ListItemExample2 {
296  @State arr: number[] = [0, 1, 2, 3, 4]
297  @State enterEndDeleteAreaString: string = "not enterEndDeleteArea"
298  @State exitEndDeleteAreaString: string = "not exitEndDeleteArea"
299  private scroller: ListScroller = new ListScroller()
300
301  @Builder itemEnd() {
302    Row() {
303      Button("Delete").margin("4vp")
304      Button("Set").margin("4vp").onClick(() => {
305        this.scroller.closeAllSwipeActions()
306      })
307    }.padding("4vp").justifyContent(FlexAlign.SpaceEvenly)
308  }
309
310  build() {
311    Column() {
312      List({ space: 10, scroller: this.scroller }) {
313        ForEach(this.arr, (item: number) => {
314          ListItem() {
315            Text("item" + item)
316              .width('100%')
317              .height(100)
318              .fontSize(16)
319              .textAlign(TextAlign.Center)
320              .borderRadius(10)
321              .backgroundColor(0xFFFFFF)
322          }
323          .transition({ type: TransitionType.Delete, opacity: 0 })
324          .swipeAction({
325            end: {
326              builder: () => { this.itemEnd() },
327              onAction: () => {
328                animateTo({ duration: 1000 }, () => {
329                  let index = this.arr.indexOf(item)
330                  this.arr.splice(index, 1)
331                })
332              },
333              actionAreaDistance: 56,
334              onEnterActionArea: () => {
335                this.enterEndDeleteAreaString = "enterEndDeleteArea"
336                this.exitEndDeleteAreaString = "not exitEndDeleteArea"
337              },
338              onExitActionArea: () => {
339                this.enterEndDeleteAreaString = "not enterEndDeleteArea"
340                this.exitEndDeleteAreaString = "exitEndDeleteArea"
341              }
342            }
343          })
344        }, (item: string) => item)
345      }
346      Text(this.enterEndDeleteAreaString).fontSize(20)
347      Text(this.exitEndDeleteAreaString).fontSize(20)
348    }
349    .padding(10)
350    .backgroundColor(0xDCDCDC)
351    .width('100%')
352    .height('100%')
353  }
354}
355```
356![deleteListItem](figures/deleteListItem.gif)
357
358### 示例3(设置卡片样式)
359该示例展示了ListItem的卡片样式效果。
360
361```ts
362// xxx.ets
363@Entry
364@Component
365struct ListItemExample3 {
366  build() {
367    Column() {
368      List({ space: "4vp", initialIndex: 0 }) {
369        ListItemGroup({ style: ListItemGroupStyle.CARD }) {
370          ForEach([ListItemStyle.CARD, ListItemStyle.CARD, ListItemStyle.NONE], (itemStyle: number, index?: number) => {
371            ListItem({ style: itemStyle }) {
372              Text("" + index)
373                .width("100%")
374                .textAlign(TextAlign.Center)
375            }
376          })
377        }
378        ForEach([ListItemStyle.CARD, ListItemStyle.CARD, ListItemStyle.NONE], (itemStyle: number, index?: number) => {
379          ListItem({ style: itemStyle }) {
380            Text("" + index)
381              .width("100%")
382              .textAlign(TextAlign.Center)
383          }
384        })
385      }
386      .width('100%')
387      .multiSelectable(true)
388      .backgroundColor(0xDCDCDC)
389    }
390    .width('100%')
391    .padding({ top: 5 })
392  }
393}
394```
395![ListItemStyle](figures/listItem3.jpeg)