• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# ListItem
2
3<!--Kit: ArkUI-->
4<!--Subsystem: ArkUI-->
5<!--Owner: @yylong-->
6<!--Designer: @yylong-->
7<!--Tester: @liuzhenshuo-->
8<!--Adviser: @HelloCrease-->
9
10用来展示列表具体item,必须配合List来使用。
11
12> **说明:**
13>
14> - 该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
15> - 该组件的父组件只能是[List](ts-container-list.md)或者[ListItemGroup](ts-container-listitemgroup.md)。
16> - 当ListItem配合LazyForEach使用时,ListItem子组件在ListItem创建时创建。配合if/else、ForEach使用时,或父组件为List/ListItemGroup时,ListItem子组件在ListItem布局时创建。
17
18## 子组件
19
20可以包含单个子组件。
21
22## 接口
23
24### ListItem<sup>10+</sup>
25
26ListItem(value?: ListItemOptions)
27
28创建ListItem组件。
29
30**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
31
32**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
33
34**系统能力:** SystemCapability.ArkUI.ArkUI.Full
35
36**参数:**
37
38| 参数名 | 类型                                      | 必填 | 说明                                                     |
39| ------ | --------------------------------------------- | ---- | ------------------------------------------------------------ |
40| value  | [ListItemOptions](#listitemoptions10对象说明) | 否   | 为ListItem提供可选参数,该对象内含有ListItemStyle枚举类型的style参数。<br/>默认值:{ style: ListItemStyle.NONE } |
41
42### ListItem<sup>(deprecated)</sup>
43
44ListItem(value?: string)
45
46创建ListItem组件。
47
48从API version 10开始,该接口不再维护,推荐使用[ListItem<sup>10+</sup>](#listitem10)。
49
50**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
51
52**系统能力:** SystemCapability.ArkUI.ArkUI.Full
53
54**参数:**
55
56| 参数名 | 类型                      | 必填 | 说明 |
57| ------ | ----------------------------- | ---- | -------- |
58| value  | string | 否   | 无       |
59
60## 属性
61
62除支持[通用属性](ts-component-general-attributes.md)外,还支持以下属性:
63
64### sticky<sup>(deprecated)</sup>
65
66sticky(value: Sticky)
67
68设置ListItem吸顶效果。
69
70从API version 9开始废弃不再使用,推荐使用[List组件sticky属性](ts-container-list.md#sticky9)。
71
72**系统能力:** SystemCapability.ArkUI.ArkUI.Full
73
74**参数:**
75
76| 参数名 | 类型                                | 必填 | 说明                                       |
77| ------ | ----------------------------------- | ---- | ------------------------------------------ |
78| value  | [Sticky](#stickydeprecated枚举说明) | 是   | ListItem吸顶效果。<br/>默认值:Sticky.None |
79
80### editable<sup>(deprecated)</sup>
81
82editable(value: boolean | EditMode)
83
84设置当前ListItem元素是否可编辑,进入编辑模式后可删除或移动列表项。
85
86从API version 9开始废弃不再使用,无替代接口。
87
88**系统能力:** SystemCapability.ArkUI.ArkUI.Full
89
90**参数:**
91
92| 参数名 | 类型                                                         | 必填 | 说明                                       |
93| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------ |
94| value  | boolean&nbsp;\|&nbsp;[EditMode](#editmodedeprecated枚举说明) | 是   | ListItem元素是否可编辑。<br/>默认值:false |
95
96### selectable<sup>8+</sup>
97
98selectable(value: boolean)
99
100设置当前ListItem元素是否可以被鼠标框选。外层List容器的鼠标框选开启时,ListItem的框选才生效。
101
102**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
103
104**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
105
106**系统能力:** SystemCapability.ArkUI.ArkUI.Full
107
108**参数:**
109
110| 参数名 | 类型    | 必填 | 说明                                              |
111| ------ | ------- | ---- | ------------------------------------------------- |
112| value  | boolean | 是   | ListItem元素是否可以被鼠标框选。设置为true时可以被鼠标框选,设置为false时无法被鼠标框选。<br/>默认值:true |
113
114### selected<sup>10+</sup>
115
116selected(value: boolean)
117
118设置当前ListItem选中状态。该属性支持[$$](../../../ui/state-management/arkts-two-way-sync.md)双向绑定变量。该属性需要在设置[选中态样式](./ts-universal-attributes-polymorphic-style.md)前使用才能生效选中态样式。
119
120**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
121
122**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
123
124**系统能力:** SystemCapability.ArkUI.ArkUI.Full
125
126**参数:**
127
128| 参数名 | 类型    | 必填 | 说明                                     |
129| ------ | ------- | ---- | ---------------------------------------- |
130| value  | boolean | 是   | 当前ListItem选中状态。设置为true时为选中状态,设置为false时为默认状态。<br/>默认值:false |
131
132### swipeAction<sup>9+</sup>
133
134swipeAction(value: SwipeActionOptions)
135
136用于设置ListItem的划出组件。
137
138**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
139
140**系统能力:** SystemCapability.ArkUI.ArkUI.Full
141
142**参数:**
143
144| 参数名 | 类型                                              | 必填 | 说明                 |
145| ------ | ------------------------------------------------- | ---- | -------------------- |
146| value  | [SwipeActionOptions](#swipeactionoptions9对象说明) | 是   | ListItem的划出组件。 |
147
148## Sticky<sup>(deprecated)</sup>枚举说明
149
150ListItem吸顶效果枚举。
151
152从API version 9开始废弃不再使用,推荐使用[List组件stickyStyle枚举](ts-container-list.md#stickystyle9枚举说明)。
153
154**系统能力:** SystemCapability.ArkUI.ArkUI.Full
155
156| 名称 | 值 | 说明 |
157| -------- | -------- | -------- |
158| None |  -  | 无吸顶效果。 |
159| Normal |  -  | 当前item吸顶。 |
160| Opacity |  -  | 当前item吸顶显示透明度变化效果。 |
161
162## EditMode<sup>(deprecated)</sup>枚举说明
163
164ListItem元素编辑模式枚举。
165
166从API version 9开始废弃不再使用,无替代接口。
167
168**系统能力:** SystemCapability.ArkUI.ArkUI.Full
169
170| 名称     | 值 | 说明      |
171| ------ | ------ | --------- |
172| None   |  -  | 编辑操作不限制。    |
173| Deletable |  -  | 可删除。 |
174| Movable |  -  | 可移动。 |
175
176## SwipeEdgeEffect<sup>9+</sup>枚举说明
177
178滑动效果枚举。
179
180**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
181
182**系统能力:** SystemCapability.ArkUI.ArkUI.Full
183
184| 名称     | 值 | 说明      |
185| ------ | ------ | --------- |
186|   Spring   |    -    | ListItem划动距离超过划出组件大小后可以继续划动。<br>如果设置了删除区域,ListItem划动距离超过删除阈值后可以继续划动,<br/>松手后按照弹簧阻尼曲线回弹。 |
187|   None   |    -    | ListItem划动距离不能超过划出组件大小。<br>如果设置了删除区域,ListItem划动距离不能超过删除阈值,<br/>并且在设置删除回调的情况下,达到删除阈值后松手触发删除回调。 |
188
189## SwipeActionOptions<sup>9+</sup>对象说明
190
191start和end对应的@builder函数中顶层必须是单个组件,不能是if/else、ForEach、LazyForEach语句。
192
193滑动手势只在listItem区域上,如果子组件划出ListItem区域外,在ListItem以外部分不会响应划动手势。所以在多列模式下,建议不要将划出组件设置太宽。
194
195**系统能力:** SystemCapability.ArkUI.ArkUI.Full
196
197| 名称                         | 类型                                                         | 只读 | 可选 | 说明                                                         |
198| ---------------------------- | ------------------------------------------------------------ | ---- | -- | ------------------------------------------------------------ |
199| start                        | [CustomBuilder](ts-types.md#custombuilder8)&nbsp;\|&nbsp;[SwipeActionItem](#swipeactionitem10对象说明) | 否   | 是 | ListItem向右划动时item左边的组件(List垂直布局时)或ListItem向下划动时item上方的组件(List水平布局时)。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
200| end                          | [CustomBuilder](ts-types.md#custombuilder8)&nbsp;\|&nbsp;[SwipeActionItem](#swipeactionitem10对象说明) | 否   | 是 | ListItem向左划动时item右边的组件(List垂直布局时)或ListItem向上划动时item下方的组件(List水平布局时)。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
201| edgeEffect                   | [SwipeEdgeEffect](#swipeedgeeffect9枚举说明)                 | 否   | 是 | 滑动效果。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。                                                |
202| onOffsetChange<sup>11+</sup> | (offset: number) => void                                     | 否   | 是 | 滑动操作偏移量更改时调用。 <br/>**说明:** <br/> 当列表项向左或向右滑动(当列表方向为“垂直”时),向上或向下滑动(当列表方向为“水平”时)位置发生变化触发,以vp为单位。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
203
204## SwipeActionItem<sup>10+</sup>对象说明
205
206List垂直布局,ListItem向右滑动,item左边的长距离滑动删除选项或向左滑动时,item右边的长距离滑动删除选项。
207</br>List水平布局,ListItem向上滑动,item下边的长距离滑动删除选项或向下滑动时,item上边的长距离滑动删除选项。
208
209**系统能力:** SystemCapability.ArkUI.ArkUI.Full
210
211| 名称                 | 类型                                                     | 只读 | 可选 | 说明                                                         |
212| -------------------- | ------------------------------------------------------------ | ---- | -- | ------------------------------------------------------------ |
213| actionAreaDistance | [Length](ts-types.md#length) | 否 | 是 | 设置组件长距离滑动删除距离阈值。<br/>默认值:56vp <br/>**说明:** <br/>不支持设置百分比。<br/>删除距离阈值大于item宽度减去划出组件宽度,或删除距离阈值小于等于0就不会设置删除区域。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
214| onAction | () => void | 否 | 是 | 组件进入长距删除区后删除ListItem时调用,进入长距删除区后抬手时触发。<br/>**说明:** <br/> 滑动后松手的位置超过或等于设置的距离阈值,并且设置的距离阈值有效时才会触发。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
215| onEnterActionArea | () => void | 否 | 是 | 在滑动条目进入删除区域时调用,只触发一次,当再次进入时仍触发。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
216| onExitActionArea | () => void | 否 | 是 |当滑动条目退出删除区域时调用,只触发一次,当再次退出时仍触发。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
217| builder |  [CustomBuilder](ts-types.md#custombuilder8) | 否 | 是 |当列表项向左或向右滑动(当列表方向为“垂直”时),向上或向下滑动(当列表方向为“水平”时)时显示的操作项。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
218| builderComponent<sup>18+</sup> |  [ComponentContent](../js-apis-arkui-ComponentContent.md) | 否 | 是 |当列表项向左或向右滑动(当列表方向为“垂直”时),向上或向下滑动(当列表方向为“水平”时)时显示的操作项。 <br/>**说明:** <br/>该参数的优先级高于参数builder。即同时设置builder和builderComponent时,以builderComponent设置的值为准。<br/> 同一个builderComponent不推荐同时给不同的start/end使用,否则会导致显示问题。 <br/>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。|
219| onStateChange<sup>11+</sup> | (state:[SwipeActionState](#swipeactionstate11枚举说明)) => void | 否 | 是 |当列表项滑动状态变化时候触发。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
220## ListItemOptions<sup>10+</sup>对象说明
221
222ListItem组件参数。
223
224**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
225
226**系统能力:** SystemCapability.ArkUI.ArkUI.Full
227
228| 名称  | 类型                                  | 只读 | 可选 | 说明                                                         |
229| ----- | ----------------------------------------- | ---- | -- | ------------------------------------------------------------ |
230| 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,居中对齐显示。 |
231
232## ListItemStyle<sup>10+</sup>枚举说明
233
234List组件卡片样式枚举。
235
236**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
237
238**系统能力:** SystemCapability.ArkUI.ArkUI.Full
239
240| 名称 | 值  | 说明             |
241| ---- | ---- | ------------------ |
242| NONE | 0 | 无样式。           |
243| CARD | 1 | 显示默认卡片样式。 |
244
245## SwipeActionState<sup>11+</sup>枚举说明
246
247列表项滑动状态枚举。
248
249**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
250
251**系统能力:** SystemCapability.ArkUI.ArkUI.Full
252
253| 名称      | 值     | 说明                                                       |
254| --------- | --------- | ------------------------------------------------------------ |
255| COLLAPSED | 0 | 收起状态,当ListItem向左或向右滑动(当列表方向为“垂直”时),<br/>向上或向下滑动(当列表方向为“水平”时)时操作项处于隐藏状态。 |
256| EXPANDED  | 1 | 展开状态,当ListItem向左或向右滑动(当列表方向为“垂直”时),<br/>向上或向下滑动(当列表方向为“水平”时)时操作项处于显示状态。<br/>**说明:**<br/>需要ListItem设置向左或向右滑动(当列表方向为“垂直”时),<br/>向上或向下滑动(当列表方向为“水平”时)时显示的操作项。 |
257| ACTIONING | 2 | 长距离状态,当ListItem进入长距删除区后删除ListItem的状态。<br/>**说明:**<br/>滑动后松手的位置超过或等于设置的距离阈值,并且设置的距离阈值有效时才能进入该状态。 |
258
259## 事件
260
261### onSelect<sup>8+</sup>
262
263onSelect(event:&nbsp;(isSelected:&nbsp;boolean)&nbsp;=&gt;&nbsp;void)
264
265ListItem元素被鼠标框选的状态改变时触发回调。
266
267**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
268
269**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
270
271**系统能力:** SystemCapability.ArkUI.ArkUI.Full
272
273**参数:**
274
275| 参数名     | 类型    | 必填 | 说明                                                         |
276| ---------- | ------- | ---- | ------------------------------------------------------------ |
277| isSelected | boolean | 是   | 进入鼠标框选范围即被选中返回true,&nbsp;移出鼠标框选范围即未被选中返回false。 |
278
279## 示例
280
281### 示例1(创建ListItem)
282该示例实现了创建ListItem的基本用法。
283
284```ts
285// xxx.ets
286export class ListDataSource implements IDataSource {
287  private list: number[] = [];
288
289  constructor(list: number[]) {
290    this.list = list;
291  }
292
293  totalCount(): number {
294    return this.list.length;
295  }
296
297  getData(index: number): number {
298    return this.list[index];
299  }
300
301  registerDataChangeListener(listener: DataChangeListener): void {
302  }
303
304  unregisterDataChangeListener(listener: DataChangeListener): void {
305  }
306}
307
308@Entry
309@Component
310struct ListItemExample {
311  private arr: ListDataSource = new ListDataSource([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
312
313  build() {
314    Column() {
315      List({ space: 20, initialIndex: 0 }) {
316        LazyForEach(this.arr, (item: number) => {
317          ListItem() {
318            Text('' + item)
319              .width('100%')
320              .height(100)
321              .fontSize(16)
322              .textAlign(TextAlign.Center)
323              .borderRadius(10)
324              .backgroundColor(0xFFFFFF)
325          }
326        }, (item: string) => item)
327      }.width('90%')
328      .scrollBar(BarState.Off)
329    }.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 })
330  }
331}
332```
333
334![zh-cn_image_0000001219864159](figures/zh-cn_image_0000001219864159.gif)
335
336### 示例2(设置划出组件)
337该示例展示了ListItem设置了swipeAction的横滑效果。
338
339```ts
340// xxx.ets
341@Entry
342@Component
343struct ListItemExample2 {
344  @State arr: number[] = [0, 1, 2, 3, 4];
345  @State enterEndDeleteAreaString: string = 'not enterEndDeleteArea';
346  @State exitEndDeleteAreaString: string = 'not exitEndDeleteArea';
347  private scroller: ListScroller = new ListScroller();
348
349  @Builder itemEnd() {
350    Row() {
351      Button('Delete').margin('4vp')
352      Button('Set').margin('4vp').onClick(() => {
353        this.scroller.closeAllSwipeActions();
354      })
355    }.padding('4vp').justifyContent(FlexAlign.SpaceEvenly)
356  }
357
358  build() {
359    Column() {
360      List({ space: 10, scroller: this.scroller }) {
361        ForEach(this.arr, (item: number) => {
362          ListItem() {
363            Text('item' + item)
364              .width('100%')
365              .height(100)
366              .fontSize(16)
367              .textAlign(TextAlign.Center)
368              .borderRadius(10)
369              .backgroundColor(0xFFFFFF)
370          }
371          .transition({ type: TransitionType.Delete, opacity: 0 })
372          .swipeAction({
373            end: {
374              builder: () => { this.itemEnd() },
375              onAction: () => {
376                this.getUIContext()?.animateTo({ duration: 1000 }, () => {
377                  let index = this.arr.indexOf(item);
378                  this.arr.splice(index, 1);
379                });
380              },
381              actionAreaDistance: 56,
382              onEnterActionArea: () => {
383                this.enterEndDeleteAreaString = 'enterEndDeleteArea';
384                this.exitEndDeleteAreaString = 'not exitEndDeleteArea';
385              },
386              onExitActionArea: () => {
387                this.enterEndDeleteAreaString = 'not enterEndDeleteArea';
388                this.exitEndDeleteAreaString = 'exitEndDeleteArea';
389              }
390            }
391          })
392        }, (item: number) => item.toString())
393      }
394      Text(this.enterEndDeleteAreaString).fontSize(20)
395      Text(this.exitEndDeleteAreaString).fontSize(20)
396    }
397    .padding(10)
398    .backgroundColor(0xDCDCDC)
399    .width('100%')
400    .height('100%')
401  }
402}
403```
404![deleteListItem](figures/deleteListItem.gif)
405
406### 示例3(设置卡片样式)
407该示例展示了ListItem的卡片样式效果。
408
409```ts
410// xxx.ets
411@Entry
412@Component
413struct ListItemExample3 {
414  build() {
415    Column() {
416      List({ space: '4vp', initialIndex: 0 }) {
417        ListItemGroup({ style: ListItemGroupStyle.CARD }) {
418          ForEach([ListItemStyle.CARD, ListItemStyle.CARD, ListItemStyle.NONE], (itemStyle: number, index?: number) => {
419            ListItem({ style: itemStyle }) {
420              Text('' + index)
421                .width('100%')
422                .textAlign(TextAlign.Center)
423            }
424          })
425        }
426        ForEach([ListItemStyle.CARD, ListItemStyle.CARD, ListItemStyle.NONE], (itemStyle: number, index?: number) => {
427          ListItem({ style: itemStyle }) {
428            Text('' + index)
429              .width('100%')
430              .textAlign(TextAlign.Center)
431          }
432        })
433      }
434      .width('100%')
435      .multiSelectable(true)
436      .backgroundColor(0xDCDCDC)
437    }
438    .width('100%')
439    .padding({ top: 5 })
440  }
441}
442```
443![ListItemStyle](figures/listItem3.jpeg)
444
445### 示例4(通过ComponentContent设置划出组件)
446
447该示例通过ComponentContent设置ListItem中的划出组件操作时显示的操作项。
448
449```ts
450// xxx.ets
451import { ComponentContent } from '@kit.ArkUI';
452
453class BuilderParams {
454  text: string | Resource;
455  scroller: ListScroller;
456  constructor(text: string | Resource, scroller: ListScroller) {
457    this.text = text;
458    this.scroller = scroller;
459  }
460}
461
462@Builder
463function itemBuilder(params: BuilderParams) {
464  Row() {
465    Button(params.text).margin('4vp')
466    Button('Set').margin('4vp').onClick(() => {
467      params.scroller.closeAllSwipeActions()
468    })
469  }.padding('4vp').justifyContent(FlexAlign.SpaceEvenly)
470}
471@Component
472struct MyListItem {
473  scroller: ListScroller = new ListScroller();
474  @State arr: number[] = [0, 1, 2, 3, 4];
475  @State project ?: number = 0;
476  startBuilder ?: ComponentContent<BuilderParams> = undefined;
477  endBuilder ?: ComponentContent<BuilderParams> = undefined;
478
479  builderParam = new BuilderParams('delete', this.scroller);
480
481  aboutToAppear(): void {
482    this.startBuilder = new ComponentContent(this.getUIContext(), wrapBuilder(itemBuilder), this.builderParam);
483    this.endBuilder = new ComponentContent(this.getUIContext(), wrapBuilder(itemBuilder), this.builderParam);
484  }
485  GetStartBuilder() {
486    this.startBuilder?.update(new BuilderParams('StartDelete', this.scroller));
487    return this.startBuilder;
488  }
489  GetEndBuilder() {
490    this.endBuilder?.update(new BuilderParams('EndDelete', this.scroller));
491    return this.endBuilder;
492  }
493  build() {
494    ListItem() {
495      Text('item' + this.project)
496        .width('100%')
497        .height(100)
498        .fontSize(16)
499        .textAlign(TextAlign.Center)
500        .borderRadius(10)
501        .backgroundColor(0xFFFFFF)
502    }
503    .transition({ type: TransitionType.Delete, opacity: 0 })
504    .swipeAction({
505      end: {
506        builderComponent: this.GetEndBuilder(),
507        onAction: () => {
508          this.getUIContext()?.animateTo({ duration: 1000 }, () => {
509            let index = this.arr.indexOf(this.project);
510            this.arr.splice(index, 1);
511          });
512        },
513        actionAreaDistance: 56
514      },
515      start: {
516        builderComponent: this.GetStartBuilder(),
517        onAction: () => {
518          this.getUIContext()?.animateTo({ duration: 1000 }, () => {
519            let index = this.arr.indexOf(this.project);
520            this.arr.splice(index, 1);
521          });
522        },
523        actionAreaDistance: 56
524      }
525    })
526    .padding(5)
527  }
528}
529
530@Entry
531@Component
532struct ListItemExample {
533  @State arr: number[] = [0, 1, 2, 3, 4];
534  private scroller: ListScroller = new ListScroller();
535
536  build() {
537    Column() {
538      List({ space: 10, scroller: this.scroller }) {
539        ListItemGroup() {
540          ForEach(this.arr, (project: number) => {
541            MyListItem({ scroller: this.scroller, project: project, arr:this.arr })
542          }, (item: string) => item)
543        }
544      }
545    }
546    .padding(10)
547    .backgroundColor(0xDCDCDC)
548    .width('100%')
549    .height('100%')
550  }
551}
552```
553![ListItemStyle](figures/deleteListItem_example04.gif)