From 9ea19ee2df638b5e4d36cebab2e9cb01bbfe39d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B0=B8=E5=87=AF?= Date: Thu, 19 Jun 2025 21:15:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9onmove?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 刘永凯 --- .../ts-component-general-attributes.md | 1 + .../arkui-ts/ts-rendering-control-foreach.md | 178 +----------------- .../ts-rendering-control-lazyforeach.md | 10 +- .../arkui-ts/ts-rendering-control-repeat.md | 16 -- .../ts-universal-attributes-drag-sorting.md | 171 +++++++++++++++++ .../arkts-new-rendering-control-repeat.md | 2 +- .../arkts-rendering-control-foreach.md | 2 +- .../arkts-rendering-control-lazyforeach.md | 2 +- 8 files changed, 179 insertions(+), 203 deletions(-) create mode 100755 zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-drag-sorting.md diff --git a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-component-general-attributes.md b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-component-general-attributes.md index 8bd2731ee6e..73423090298 100644 --- a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-component-general-attributes.md +++ b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-component-general-attributes.md @@ -48,6 +48,7 @@ - [隐私遮罩](ts-universal-attributes-obscured.md) - [文本通用](ts-universal-attributes-text-style.md) - [拖拽控制](ts-universal-attributes-drag-drop.md) +- [拖拽排序](ts-universal-attributes-drag-sorting.md) - [安全区域](ts-universal-attributes-expand-safe-area.md) - [组件内容填充方式](ts-universal-attributes-renderfit.md) - [事件独占控制](ts-universal-attributes-monopolize-events.md) diff --git a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-rendering-control-foreach.md b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-rendering-control-foreach.md index 92bc631e568..fc7b51d0511 100644 --- a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-rendering-control-foreach.md +++ b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-rendering-control-foreach.md @@ -31,180 +31,4 @@ ForEach接口基于数组类型数据来进行循环渲染,需要与容器组 > **说明:** > > - `ForEach`的`itemGenerator`函数可以包含`if/else`条件渲染逻辑。另外,也可以在`if/else`条件渲染语句中使用`ForEach`组件。 -> - 在初始化渲染时,`ForEach`会加载数据源的所有数据,并为每个数据项创建对应的组件,然后将其挂载到渲染树上。如果数据源非常大或有特定的性能需求,建议使用`LazyForEach`组件。最佳实践请参考[使用懒加载优化性能](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-lazyforeach-optimization)。 - -## 属性 - -继承自[DynamicNode](#dynamicnode12)。 - -## DynamicNode12+ - -定义节点。 - -**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -### onMove12+ - -onMove(handler: Optional\) - -拖拽排序数据移动回调。拖拽排序只有在List组件中使用,并且ForEach每次迭代都生成一个ListItem组件时才生效。 - -**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| ------ | --------- | ---- | ---------- | -| handler | Optional\<[OnMoveHandler](#onmovehandler)\> | 是 | 拖拽动作。 | - -### onMove20+ - -onMove(handler: Optional\, eventHandler: ItemDragEventHandler) - -拖拽排序数据移动回调。拖拽排序只有在List组件中使用,并且ForEach每次迭代都生成一个ListItem组件时才生效。设置拖拽排序时可以定义不同的拖拽操作,并在响应事件发生时响应。 - -**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| ------ | --------- | ---- | ---------- | -| handler | Optional\<[OnMoveHandler](#onmovehandler)\> | 是 | 拖拽动作。 | -| eventHandler | [ItemDragEventHandler](#itemdrageventhandler20) | 是 | 拖拽发生时产生的回调。 | - -### ItemDragEventHandler20+ - -定义数据源拖拽事件回调。用于响应不同的拖拽操作。 - -**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| ------ | ------ | ---- | -------------------- | -| onLongPress | [Callback](../../apis-basic-services-kit/js-apis-base.md#callback)\ | 是 | 长按时触发的回调。
- Index:长按时当前目标的索引号。 | -| onDragStart | [Callback](../../apis-basic-services-kit/js-apis-base.md#callback)\ | 是 | 在页面跟手滑动开始时触发的回调。
- Index:拖拽开始时当前目标的索引号。 | -| onMoveThrough | [OnMoveHandler](#onmovehandler) | 是 | 在页面跟手滑动过程中经过其他组件时触发的回调。 | -| onDrop | [Callback](../../apis-basic-services-kit/js-apis-base.md#callback)\ | 是 | 在页面跟手滑动结束时触发的回调。
- Index:拖拽结束时当前目标的索引号。 | - -### OnMoveHandler - -type OnMoveHandler = (from: number, to: number) => void - -定义数据源拖拽回调。 - -**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| ------ | --------- | ---- | ---------- | -| from | number | 是 | 数据源拖拽起始索引号。取值范围是[0, 数据源长度-1]。 | -| to | number | 是 | 数据源拖拽目标索引号。取值范围是[0, 数据源长度-1]。 | - -## 示例 - -### 示例1(使用OnMove进行拖拽) - -以下示例展示了ForEach在List组件内使用时的拖拽效果。 - -```ts -@Entry -@Component -struct ForEachSort { - @State arr: Array = []; - - build() { - Row() { - List() { - ForEach(this.arr, (item: string) => { - ListItem() { - Text(item.toString()) - .fontSize(16) - .textAlign(TextAlign.Center) - .size({height: 100, width: "100%"}) - }.margin(10) - .borderRadius(10) - .backgroundColor("#FFFFFFFF") - }, (item: string) => item) - .onMove((from:number, to:number) => { - let tmp = this.arr.splice(from, 1); - this.arr.splice(to, 0, tmp[0]); - }) - } - .width('100%') - .height('100%') - .backgroundColor("#FFDCDCDC") - } - } - aboutToAppear(): void { - for (let i = 0; i < 100; i++) { - this.arr.push(i.toString()); - } - } -} -``` - -### 示例2(使用OnMove进行拖拽,并设置拖拽事件回调) - -以下示例展示了ForEach在List组件设置拖拽效果后触发的回调事件。 - -```ts -// xxx.ets -@Entry -@Component -struct ListOnMoveExample { - private arr: number[] = [0, 1, 2, 3, 4, 5, 6]; - - build() { - Column() { - List({ space: 20, initialIndex: 0 }) { - ForEach(this.arr, (item: number) => { - ListItem() { - Text('第一个List' + item) - .width('100%') - .height(80) - .fontSize(16) - .textAlign(TextAlign.Center) - .borderRadius(10) - .backgroundColor(0xFFFFFF) - } - }, (item: string) => item) - .onMove((from: number, to: number) => { - let tmp = this.arr.splice(from, 1); - this.arr.splice(to, 0, tmp[0]); - console.log('List onMove From: ' + from); - console.log('List onMove To: ' + to); - }, - { - onLongPress: (index: number) => { - console.log('List onLongPress: ' + index); - }, - onDrop: (index: number) => { - console.log('List onDrop: ' + index); - }, - onDragStart: (index: number) => { - console.log('List onDragStart: ' + index); - }, - onMoveThrough: (from: number, Through: number) => { - console.log('List onMoveThrough From: ' + from); - console.log('List onMoveThrough To: ' + Through); - } - } - ) - }.width('90%') - .scrollBar(BarState.Off) - }.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 }) - } -} -``` +> - 在初始化渲染时,`ForEach`会加载数据源的所有数据,并为每个数据项创建对应的组件,然后将其挂载到渲染树上。如果数据源非常大或有特定的性能需求,建议使用`LazyForEach`组件。最佳实践请参考[使用懒加载优化性能](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-lazyforeach-optimization)。 \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-rendering-control-lazyforeach.md b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-rendering-control-lazyforeach.md index d89c11bdde6..e3aabfe359c 100644 --- a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-rendering-control-lazyforeach.md +++ b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-rendering-control-lazyforeach.md @@ -25,10 +25,6 @@ LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程 | itemGenerator | (item: Object, index: number) => void | 是 | 子组件生成函数,为数组中的每一个数据项创建一个子组件。
**说明:**
- item是当前数据项,index是数据项索引值。
- itemGenerator的函数体必须使用大括号{...}。
- itemGenerator每次迭代只能并且必须生成一个子组件。
- itemGenerator中可以使用if语句,但是必须保证if语句每个分支都会创建一个相同类型的子组件。 | | keyGenerator | (item: Object, index: number) => string | 否 | 键值生成函数,用于给数据源中的每一个数据项生成唯一且固定的键值。修改数据源中的一个数据项若不影响其生成的键值,则对应组件不会被更新,否则此处组件就会被重建更新。`keyGenerator`参数是可选的,但是,为了使开发框架能够更好地识别数组更改并正确更新组件,建议提供。
**说明:**
- item是当前数据项,index是数据项索引值。
- 数据源中的每一个数据项生成的键值不能重复。
- `keyGenerator`缺省时,使用默认的键值生成函数,即`(item: Object, index: number) => { return viewId + '-' + index.toString(); }`,生成键值仅受索引值index影响。 | -## 属性 - -继承自[DynamicNode](./ts-rendering-control-foreach.md#dynamicnode12)。 - ## IDataSource **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 @@ -87,7 +83,7 @@ registerDataChangeListener(listener: DataChangeListener): void | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------- | ---- | -------------- | -| listener | [DataChangeListener](#datachangelistener10) | 是 | 数据变化监听器。 | +| listener | [DataChangeListener](#datachangelistener7) | 是 | 数据变化监听器。 | ### unregisterDataChangeListener @@ -103,9 +99,9 @@ unregisterDataChangeListener(listener: DataChangeListener): void | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------- | ---- | -------------- | -| listener | [DataChangeListener](#datachangelistener10) | 是 | 数据变化监听器。 | +| listener | [DataChangeListener](#datachangelistener7) | 是 | 数据变化监听器。 | -## DataChangeListener10+ +## DataChangeListener7+ 数据变化监听器。 diff --git a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-rendering-control-repeat.md b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-rendering-control-repeat.md index 59c7a3579f3..8f915c6acf8 100644 --- a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-rendering-control-repeat.md +++ b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-rendering-control-repeat.md @@ -203,22 +203,6 @@ List() { } ``` -### onMove19+ - -onMove(handler: Optional\) - -拖拽排序数据移动回调。当父容器组件为[List](./ts-container-list.md)时生效。 - -**原子化服务API:** 从API version 19开始,该接口支持在原子化服务中使用。 - -**系统能力:** SystemCapability.ArkUI.ArkUI.Full - -**参数:** - -| 参数名 | 类型 | 必填 | 说明 | -| ------ | --------- | ---- | ---------- | -| handler | Optional\<[OnMoveHandler](./ts-rendering-control-foreach.md#onmovehandler)\> | 是 | 拖拽动作。 | - ## RepeatArray\18+ type RepeatArray\ = Array\ | ReadonlyArray\ | Readonly\\> diff --git a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-drag-sorting.md b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-drag-sorting.md new file mode 100755 index 00000000000..1a5ba36a0d0 --- /dev/null +++ b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-drag-sorting.md @@ -0,0 +1,171 @@ +# 拖拽排序 + +在List组件下使用ForEach/LazyForEach/Repeat,并设置onMove事件,每次迭代生成一个ListItem时,可以使能拖拽排序。拖拽排序离手后,如果数据位置发生变化,将触发onMove事件,上报数据移动原始索引号和目标索引号。在onMove事件中,需要根据上报的起始索引号和目标索引号修改数据源。确保数据仅顺序发生变化,才能正常执行落位动画。 + +> **说明:** +> +> 从API version 12开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## onMove + +onMove(handler: Optional\) + +拖拽排序数据移动回调。当父容器组件为[List](./ts-container-list.md#list),并且ForEach/LazyForEach/Repeat每次迭代都生成一个ListItem组件时才生效。设置拖拽排序时可以定义不同的拖拽操作,并在响应事件发生时响应。 + +**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 + +**系统能力:** SystemCapability.ArkUI.ArkUI.Full + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | --------- | ---- | ---------- | +| handler | Optional\<[OnMoveHandler](#onmovehandler)\> | 是 | 拖拽动作。 | + +## onMove20+ + +onMove(handler: Optional\, eventHandler: ItemDragEventHandler) + +拖拽排序数据移动回调。当父容器组件为[List](./ts-container-list.md#list),并且ForEach/LazyForEach/Repeat每次迭代都生成一个ListItem组件时才生效。设置拖拽排序时可以定义不同的拖拽操作,并在响应事件发生时响应。 + +**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。 + +**系统能力:** SystemCapability.ArkUI.ArkUI.Full + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | --------- | ---- | ---------- | +| handler | Optional\<[OnMoveHandler](#onmovehandler)\> | 是 | 拖拽动作。 | +| eventHandler | [ItemDragEventHandler](#itemdrageventhandler20) | 是 | 拖拽发生时产生的回调。 | + +## OnMoveHandler + +type OnMoveHandler = (from: number, to: number) => void + +定义数据源拖拽回调。 + +**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 + +**系统能力:** SystemCapability.ArkUI.ArkUI.Full + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | --------- | ---- | ---------- | +| from | number | 是 | 数据源拖拽起始索引号。取值范围是[0, 数据源长度-1]。 | +| to | number | 是 | 数据源拖拽目标索引号。取值范围是[0, 数据源长度-1]。 | + +## ItemDragEventHandler20+ + +定义数据源拖拽事件回调。用于响应不同的拖拽操作。 + +**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。 + +**系统能力:** SystemCapability.ArkUI.ArkUI.Full + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| ------ | ------ | ---- | -------------------- | +| onLongPress | [Callback](../../apis-basic-services-kit/js-apis-base.md#callback)\ | 否 | 长按时触发的回调。
- 参数index为长按时当前目标的索引号。 | +| onDragStart | [Callback](../../apis-basic-services-kit/js-apis-base.md#callback)\ | 否 | 在页面跟手滑动开始时触发的回调。
- 参数index为拖拽开始时当前目标的索引号。 | +| onMoveThrough | [OnMoveHandler](#onmovehandler) | 否 | 在页面跟手滑动过程中经过其他组件时触发的回调。 | +| onDrop | [Callback](../../apis-basic-services-kit/js-apis-base.md#callback)\ | 否 | 在页面跟手滑动结束时触发的回调。
- 参数index为拖拽结束时当前目标的索引号。 | + +## 示例 + +### 示例1(使用OnMove进行拖拽) + +以下示例展示了ForEach在List组件内使用时的拖拽效果。 + +```ts +@Entry +@Component +struct ForEachSort { + @State arr: Array = []; + + build() { + Row() { + List() { + ForEach(this.arr, (item: string) => { + ListItem() { + Text(item.toString()) + .fontSize(16) + .textAlign(TextAlign.Center) + .size({height: 100, width: '100%'}) + }.margin(10) + .borderRadius(10) + .backgroundColor('#FFFFFFFF') + }, (item: string) => item) + .onMove((from:number, to:number) => { + let tmp = this.arr.splice(from, 1); + this.arr.splice(to, 0, tmp[0]); + }) + } + .width('100%') + .height('100%') + .backgroundColor('#FFDCDCDC') + } + } + aboutToAppear(): void { + for (let i = 0; i < 100; i++) { + this.arr.push(i.toString()); + } + } +} +``` + +### 示例2(使用OnMove进行拖拽,并设置拖拽事件回调) + +以下示例展示了ForEach在List组件设置拖拽效果后触发的回调事件。 + +```ts +// xxx.ets +@Entry +@Component +struct ListOnMoveExample { + private arr: number[] = [0, 1, 2, 3, 4, 5, 6]; + + build() { + Column() { + List({ space: 20, initialIndex: 0 }) { + ForEach(this.arr, (item: number) => { + ListItem() { + Text('第一个List' + item) + .width('100%') + .height(80) + .fontSize(16) + .textAlign(TextAlign.Center) + .borderRadius(10) + .backgroundColor(0xFFFFFF) + } + }, (item: string) => item) + .onMove((from: number, to: number) => { + let tmp = this.arr.splice(from, 1); + this.arr.splice(to, 0, tmp[0]); + console.log('List onMove From: ' + from); + console.log('List onMove To: ' + to); + }, + { + onLongPress: (index: number) => { + console.log('List onLongPress: ' + index); + }, + onDrop: (index: number) => { + console.log('List onDrop: ' + index); + }, + onDragStart: (index: number) => { + console.log('List onDragStart: ' + index); + }, + onMoveThrough: (from: number, to: number) => { + console.log('List onMoveThrough From: ' + from); + console.log('List onMoveThrough To: ' + to); + } + } + ) + }.width('90%') + .scrollBar(BarState.Off) + }.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 }) + } +} +``` \ No newline at end of file diff --git a/zh-cn/application-dev/ui/state-management/arkts-new-rendering-control-repeat.md b/zh-cn/application-dev/ui/state-management/arkts-new-rendering-control-repeat.md index 3ed61d70a98..303cdfac9a9 100644 --- a/zh-cn/application-dev/ui/state-management/arkts-new-rendering-control-repeat.md +++ b/zh-cn/application-dev/ui/state-management/arkts-new-rendering-control-repeat.md @@ -341,7 +341,7 @@ struct RepeatLazyLoading { ## 拖拽排序 -当Repeat在List组件下使用,并且设置了onMove事件,Repeat每次迭代都生成一个ListItem时,可以使能拖拽排序。Repeat拖拽排序特性从API version 19开始支持。 +当Repeat在List组件下使用,并且设置了[onMove](../../reference/apis-arkui/arkui-ts/ts-universal-attributes-drag-sorting.md#onmove)事件,Repeat每次迭代都生成一个ListItem时,可以使能拖拽排序。Repeat拖拽排序特性从API version 19开始支持。 > **注意:** > diff --git a/zh-cn/application-dev/ui/state-management/arkts-rendering-control-foreach.md b/zh-cn/application-dev/ui/state-management/arkts-rendering-control-foreach.md index 9239c7e8c72..0d275eb0160 100644 --- a/zh-cn/application-dev/ui/state-management/arkts-rendering-control-foreach.md +++ b/zh-cn/application-dev/ui/state-management/arkts-rendering-control-foreach.md @@ -460,7 +460,7 @@ struct ArticleCard { 2. `article`实例是`@ObjectLink`装饰的状态变量,其属性值变化,会触发`ArticleCard`组件渲染,此时读取的`isLiked`和`likesCount`为修改后的新值。 ### 拖拽排序 -在List组件下使用ForEach,并设置onMove事件,每次迭代生成一个ListItem时,可以使能拖拽排序。拖拽排序离手后,如果数据位置发生变化,将触发onMove事件,上报数据移动原始索引号和目标索引号。在onMove事件中,需要根据上报的起始索引号和目标索引号修改数据源。数据源修改前后,要保持每个数据的键值不变,只是顺序发生变化,才能保证落位动画正常执行。 +在List组件下使用ForEach,并设置[onMove](../../reference/apis-arkui/arkui-ts/ts-universal-attributes-drag-sorting.md#onmove)事件,每次迭代生成一个ListItem时,可以使能拖拽排序。拖拽排序离手后,如果数据位置发生变化,将触发onMove事件,上报数据移动原始索引号和目标索引号。在onMove事件中,需要根据上报的起始索引号和目标索引号修改数据源。数据源修改前后,要保持每个数据的键值不变,只是顺序发生变化,才能保证落位动画正常执行。 ```ts @Entry diff --git a/zh-cn/application-dev/ui/state-management/arkts-rendering-control-lazyforeach.md b/zh-cn/application-dev/ui/state-management/arkts-rendering-control-lazyforeach.md index 2627ab4fb54..e66da99de15 100644 --- a/zh-cn/application-dev/ui/state-management/arkts-rendering-control-lazyforeach.md +++ b/zh-cn/application-dev/ui/state-management/arkts-rendering-control-lazyforeach.md @@ -1003,7 +1003,7 @@ struct ChildComponent { 使用`@Param`装饰器,子组件可以接受外部输入参数,实现父子组件间的数据同步。在`MyComponent`中创建子组件时,传递`item.message`,并用`@Param`修饰的变量`data`与其关联。点击`ListItem`中的组件修改`item.message`,数据变化会从父组件传递到子组件,触发子组件刷新。 ## 拖拽排序 -当LazyForEach在List组件下使用,并且设置了onMove事件,可以使能拖拽排序。拖拽排序释放后,如果数据位置发生变化,将触发onMove事件,上报原始索引号和目标索引号。在onMove事件中,根据上报的索引号修改数据源。修改数据源时,无需调用DataChangeListener接口通知数据源变化。 +当LazyForEach在List组件下使用,并且设置了[onMove](../../reference/apis-arkui/arkui-ts/ts-universal-attributes-drag-sorting.md#onmove)事件,可以使能拖拽排序。拖拽排序释放后,如果数据位置发生变化,将触发onMove事件,上报原始索引号和目标索引号。在onMove事件中,根据上报的索引号修改数据源。修改数据源时,无需调用DataChangeListener接口通知数据源变化。 ```ts /** BasicDataSource代码见文档末尾BasicDataSource示例代码: string类型数组的BasicDataSource代码 **/ -- Gitee