HarmonyOS 鸿蒙Next 自定义组件如何写自定义事件
HarmonyOS 鸿蒙Next 自定义组件如何写自定义事件
自定义组件如何写自定义事件
2 回复
自定义组件HSCell 中自定义事件tapEvent,通过点击修改数据,实现UI状态的变化
[@Observed](/user/Observed)
class HSItemData {
choose: boolean = false
constructor(choose: boolean) {
this.choose = choose
}
}
[@Observed](/user/Observed)
class HSTestDataModel {
itemArray: Array<HSItemData> = new Array()
constructor(itemArray: HSItemData[]) {
this.itemArray = itemArray
}
}
[@Component](/user/Component)
struct HSCell {
[@ObjectLink](/user/ObjectLink) itemData: HSItemData
tapEvent?: (item: HSItemData) => void
build() {
Row() {
if (this.itemData.choose) {
Text("选中")
}
else {
Text("未选中")
}
}
.backgroundColor(Color.Pink)
.onClick(() => {
if (this.tapEvent) {
this.tapEvent(this.itemData)
}
})
.margin({ bottom: 10 })
.width('100%')
.height(68)
}
}
[@Entry](/user/Entry)
[@Component](/user/Component)
export struct HSTestPage {
listeners: DataChangeListener[] = []
[@State](/user/State) dataModel: HSTestDataModel = new HSTestDataModel([])
aboutToAppear(): void {
for (let i = 0; i < 10; i++) {
this.dataModel.itemArray.push(new HSItemData(false))
}
}
build() {
Column() {
List() {
LazyForEach(this, (item: HSItemData, index) => {
HSCell({
itemData: item, tapEvent: () => {
item.choose = !item.choose
}
})
}, (item: string) => item.toString())
}
}
.height('100%')
}
totalCount() {
return this.dataModel.itemArray.length
}
getData(index: number) {
return this.dataModel.itemArray[index]
}
registerDataChangeListener(listener: DataChangeListener) {
if (this.listeners.indexOf(listener) < 0) {
this.listeners.push(listener);
}
}
unregisterDataChangeListener(listener: DataChangeListener) {
const pos = this.listeners.indexOf(listener);
if (pos >= 0) {
this.listeners.splice(pos, 1);
}
}
reloadTableView(): void {
this.listeners.forEach(listener => {
listener.onDataReloaded();
})
}
}
在HarmonyOS鸿蒙Next系统中,自定义组件编写自定义事件涉及以下几个关键步骤:
-
定义事件类型:首先,在自定义组件的Java或Kotlin代码中定义一个新的事件类型,通常使用
Event
或其子类。这个事件类需要包含所有需要传递的数据。 -
发送事件:在组件内部,通过
ComponentContext
的sendEvent
方法发送自定义事件。这通常发生在用户交互(如点击、滑动等)触发的回调函数中。 -
接收事件:在父组件或监听该事件的组件中,通过实现
EventListener
接口或相应的监听器方法来接收并处理自定义事件。需要在组件的XML布局文件中,通过ohos:event
属性绑定事件监听器。 -
处理事件:在事件监听器的回调函数中处理接收到的自定义事件,执行相应的业务逻辑。
请确保自定义事件类、发送和接收逻辑正确无误,并且XML布局文件中的事件绑定正确。此外,还需要注意事件传递的数据类型与接收端期望的数据类型一致。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。