鸿蒙5.0开发进阶:ArkTS组件-LazyForEach

往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)


LazyForEach

说明

本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

接口

LazyForEach(dataSource: IDataSource,itemGenerator: (item: any, index: number) => void,keyGenerator?: (item: any, index: number) => string,)

LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当在滚动容器中使用了LazyForEach,框架会根据滚动容器可视区域按需创建组件,当组件滑出可视区域外时,框架会进行组件销毁回收以降低内存占用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
dataSourceIDataSourceLazyForEach数据源,需要开发者实现相关接口。
itemGenerator(item: Object, index: number) => void

子组件生成函数,为数组中的每一个数据项创建一个子组件。

说明:

- item是当前数据项,index是数据项索引值。

- itemGenerator的函数体必须使用大括号{...}。

- itemGenerator每次迭代只能并且必须生成一个子组件。

- itemGenerator中可以使用if语句,但是必须保证if语句每个分支都会创建一个相同类型的子组件。

- itemGenerator中不允许使用ForEach和LazyForEach语句。

keyGenerator(item: Object, index: number) => string

键值生成函数,用于给数据源中的每一个数据项生成唯一且固定的键值。当数据项在数组中的位置更改时,其键值不得更改,当数组中的数据项被新项替换时,被替换项的键值和新项的键值必须不同。键值生成器的功能是可选的,但是,为了使开发框架能够更好地识别数组更改,提高性能,建议提供。如将数组反向时,如果没有提供键值生成器,则LazyForEach中的所有节点都将重建。

说明:

- item是当前数据项,index是数据项索引值。

- 数据源中的每一个数据项生成的键值不能重复。

属性

继承自DynamicNode

IDataSource10+

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

totalCount

totalCount(): number

获得数据总数。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

getData

getData(index: number): Object

获取索引值index对应的数据。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
indexnumber获取数据对应的索引值。

registerDataChangeListener

registerDataChangeListener(listener: DataChangeListener): void

注册数据改变的监听器。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
listenerDataChangeListener数据变化监听器。

unregisterDataChangeListener

unregisterDataChangeListener(listener: DataChangeListener): void

注销数据改变的监听器。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
listenerDataChangeListener数据变化监听器。

DataChangeListener10+

数据变化监听器。

说明

DataChangeListener除onDatasetChange以外的方法中,当参数包含index且值为负数时,会默认用0来替换。onDatasetChange中,当单个DataOperation参数包含index且值在数据源索引范围之外(DataAddOperation中index可以等于数据源长度),则对应DataOperation不会生效。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

onDataReloaded

onDataReloaded(): void

通知组件重新加载所有数据。键值没有变化的数据项会使用原先的子组件,键值发生变化的会重建子组件。重新加载数据完成后调用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

onDataAdded(deprecated)

onDataAdded(index: number): void

通知组件index的位置有数据添加。添加数据完成后调用。

从API 8开始,建议使用onDataAdd

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
indexnumber数据添加位置的索引值。

onDataMoved(deprecated)

onDataMoved(from: number, to: number): void

通知组件数据有移动。将from和to位置的数据进行交换。

从API 8开始,建议使用onDataMove

说明

数据移动前后键值要保持不变,如果键值有变化,应使用删除数据和新增数据接口。数据移动起始位置与数据移动目标位置交换完成后调用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
fromnumber数据移动起始位置。
tonumber数据移动目标位置。

onDataDeleted(deprecated)

onDataDeleted(index: number): void

通知组件删除index位置的数据并刷新LazyForEach的展示内容。删除数据完成后调用。

从API 8开始,建议使用onDataDelete

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
indexnumber数据删除位置的索引值。

onDataChanged(deprecated)

onDataChanged(index: number): void

通知组件index的位置有数据有变化。改变数据完成后调用。

从API 8开始,建议使用onDataChange

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
indexnumber数据变化监听器。

onDataAdd8+

onDataAdd(index: number): void

通知组件index的位置有数据添加。添加数据完成后调用

卡片能力: 从API version 10开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
indexnumber数据添加位置的索引值。

onDataMove8+

onDataMove(from: number, to: number): void

通知组件数据有移动。将from和to位置的数据进行交换。数据移动起始位置与数据移动目标位置交换完成后调用。

说明

数据移动前后键值要保持不变,如果键值有变化,应使用删除数据和新增数据接口。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
fromnumber数据移动起始位置。
tonumber数据移动目标位置。

onDataDelete8+

onDataDelete(index: number): void

通知组件删除index位置的数据并刷新LazyForEach的展示内容。删除数据完成后调用。

说明

需要保证dataSource中的对应数据已经在调用onDataDelete前删除,否则页面渲染将出现未定义的行为。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
indexnumber数据删除位置的索引值。

onDataChange8+

onDataChange(index: number): void

通知组件index的位置有数据有变化。改变数据完成后调用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
indexnumber数据变化位置的索引值。

onDatasetChange12+

onDatasetChange(dataOperations: DataOperation[]): void

进行批量的数据处理后,调用onDatasetChange接口通知组件按照dataOperations刷新组件。

说明

onDatasetChange接口不能与其他DataChangeListener的更新接口混用。如在同一个LazyForEach中,调用过onDataAdd接口后,不能再调用onDatasetChange接口;反之,调用过onDatasetChange接口后,也不能调用onDataAdd等其他更新接口。页面中不同LazyForEach之间互不影响。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
dataOperationsDataOperation[]一次处理数据的操作。

DataOperation12+

说明

本模块首批接口从API version 12开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

DataAddOperation

添加数据操作。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
typeDataOperationType.ADD数据添加类型。
indexnumber插入数据索引值。
countnumber插入数量,默认为1。
keystring | Array<string>为插入的数据分配键值。

DataDeleteOperation

删除数据操作。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
typeDataOperationType.DELETE数据删除类型。
indexnumber起始删除位置索引值。
countnumber删除数据数量,默认为1。

DataChangeOperation

改变数据操作。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
typeDataOperationType.CHANGE数据改变类型。
indexnumber改变的数据的索引值。
keystring为改变的数据分配新的键值,默认使用原键值。

DataMoveOperation

移动数据操作。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
typeDataOperationType.MOVE数据移动类型。
indexMoveIndex移动位置。
keystring为被移动的数据分配新的键值,默认使用原键值。

MoveIndex

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
fromnumber起始移动位置。
tonumber目的移动位置。

DataExchangeOperation

交换数据操作。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
typeDataOperationType.EXCHANGE数据交换类型。
indexExchangeIndex交换位置。
keyExchangeKey分配新的键值,默认使用原键值。

ExchangeIndex

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
startnumber第一个交换位置。
endnumber第二个交换位置。

ExchangeKey

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
startstring为第一个交换的位置分配新的键值,默认使用原键值。
endstring为第二个交换的位置分配新的键值,默认使用原键值。

DataReloadOperation

重载所有数据操作。当onDatasetChange含有DataOperationType.RELOAD操作时,其余操作全部失效,框架会自己调用keygenerator进行键值比对。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
typeDataOperationType.RELOAD数据全部重载类型。

DataOperationType枚举说明

枚举类型,数据操作说明。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称说明
ADDadd数据添加。
DELETEdelete数据删除。
CHANGEchange数据改变。
MOVEmove数据移动。
EXCHANGEexchange数据交换。
RELOADreload全部数据重载。

HarmonyOS 5.0ArkTS 组件中,设置触摸热区(Touch Area)属性可以通过组件的 `touchable` 和 `hitTestBehavior` 等属性来实现。这些属性允许开发者定义组件响应触摸事件的区域和行为。 ### 配置触摸热区属性 #### 1. `touchable` 属性 `touchable` 属性用于控制组件是否可以响应触摸事件。设置为 `true` 时,组件将可以响应触摸事件;设置为 `false` 时,组件将忽略所有触摸事件。 ```ts @Component struct MyComponent { build() { Column() { Text('Click Me') .fontSize(30) .touchable(true) } .width('100%') .height(100) } } ``` #### 2. `hitTestBehavior` 属性 `hitTestBehavior` 属性用于定义组件在命中测试(Hit Test)中的行为。它有以下几种取值: - `HitTestBehavior.self`: 组件仅在其自身的区域内响应触摸事件。 - `HitTestBehavior.none`: 组件不响应任何触摸事件。 - `HitTestBehavior.default`: 组件按照默认行为响应触摸事件。 ```ts @Component struct MyComponent { build() { Column() { Text('Click Me') .fontSize(30) .hitTestBehavior(HitTestBehavior.self) } .width('100%') .height(100) } } ``` #### 3. 自定义触摸热区 如果需要更复杂的触摸热区配置,可以通过自定义组件的 `onTouch` 事件来实现。通过监听触摸事件,开发者可以自定义组件的响应逻辑。 ```ts @Component struct MyComponent { @State message: string = 'Touch Me' build() { Column() { Text(this.message) .fontSize(30) .onTouch((event: TouchEvent) => { if (event.type === TouchType.Down) { this.message = 'Touched Down' } else if (event.type === TouchType.Up) { this.message = 'Touched Up' } }) } .width('100%') .height(100) } } ``` ### 注意事项 - **性能优化**:在设置触摸热区时,应避免不必要的复杂逻辑,以确保应用的响应速度和性能。 - **交互设计**:触摸热区的设计应符合用户习惯,避免过于敏感或响应区域过小的问题。 通过以上方法,开发者可以灵活地配置 ArkTS 组件的触摸热区属性,以满足不同的交互需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值