HarmonyOS 鸿蒙Next 页面与页面直接如何回调,麻烦提供代码示例

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 页面与页面直接如何回调,麻烦提供代码示例

例如A页面跳转了B页面,B页面又跳转了C,通过B页面或者C页面的某个操作方法,通知回调A页面执行相关方法。

2 回复

您好,您可以使用自定义订阅事件的方式来实现

import display from '[@ohos](/user/ohos).display';
import emitter from '[@ohos](/user/ohos).events.emitter';
import { router } from '[@kit](/user/kit).ArkUI';
import { JSON } from '[@kit](/user/kit).ArkTS';
[@Entry](/user/Entry)
[@Component](/user/Component)
struct DisplayTest {
build() {
Column({ space: 20 }) {
Button('Test').type(ButtonType.Capsule).onClick(() => {
let innerEvent: emitter.InnerEvent = {
eventId: 12222
};
//触发id为12222的事件
emitter.on(innerEvent, (data) => {
console.info('once callback' + JSON.stringify(data));
});
router.pushUrl({ url: 'pages/PageOne' })
}).width('50%')
}.width("100%").height('100%').justifyContent(FlexAlign.Center)
}
}
// PageOne.ets 页面
import emitter from '[@ohos](/user/ohos).events.emitter';
[@Entry](/user/Entry)
[@Component](/user/Component)
struct PageOne {
build() {
Column() {
Text('PageOne').width('50%')
Button('send').type(ButtonType.Capsule).width('50%').onClick(() => {
let eventData: emitter.EventData = { data: { "content": "c", "id": 1, } };
let innerEvent: emitter.InnerEvent = {
eventId: 12222,
priority: emitter.EventPriority.HIGH
};
//发布id为12222的事件
emitter.emit(innerEvent, eventData);
})
}.justifyContent(FlexAlign.Center).width('100%').height('100%')
}
}

在HarmonyOS鸿蒙系统中,页面间的回调通常可以通过事件(Event)机制或者服务(Service)来实现。以下是一个简单的示例,展示如何通过事件机制实现页面间的回调。

页面A(发送事件)

// 发送事件
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
        .withBundle("key", "value") // 传递数据
        .build();
intent.setOperation(operation);
publishEvent(intent, "eventName"); // 发送事件,事件名为"eventName"

页面B(接收事件)

// 订阅事件
@Override
protected void onStart(Intent intent) {
    super.onStart(intent);
    subscribeEvent("eventName", this, new IEventReceiver() {
        @Override
        public void onReceiveEvent(IEventReceiver receiver, Intent intent) {
            // 处理接收到的事件
            Bundle bundle = intent.getBundle();
            String value = bundle.getString("key");
            // 使用value进行后续处理
        }
    });
}

上述代码示例展示了如何在页面A发送一个事件,并在页面B中接收并处理该事件。请确保在页面B的onStart方法中订阅事件,以便在页面启动时能够接收到事件。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部