HarmonyOS 鸿蒙Next subWindow中跳转页面的问题

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

HarmonyOS 鸿蒙Next subWindow中跳转页面的问题

subWindow是windowStage.createSubWindow创建的子窗口
1.在subWindow的ui里跳转页面例如router.pushUrl()
2.在subWindow里发送事件emitter.emit() 然后在mainWindow的page里接收事件再执行router.pushUrl()
3.用router跳转页面后关闭subWindow执行subWindow.destroyWindow后会连带关闭了router跳转后的页面

也就是说subWindow触发的事件router,后续的跳转page都关联在subWindow里。

有没有什么办法可以实现在subWindow里触发然后在mainWindow拉起页面而不受subWindow后续的关闭影响,让跳转page运行在mainWindow里面?


更多关于HarmonyOS 鸿蒙Next subWindow中跳转页面的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在创建子窗口的时候,通过setWindowFocusable设置为false后,使用间接跳转,可以实现在mainWindow拉起页面而不受subWindow后续的关闭影响
可参考以下demo:

SubWindowApi.ets
……
// 创建子窗口
private createSubWindow(windowStage: window.WindowStage | null, params:SubWindowParams | null) {
  try {
    if (!windowStage || !params ) {
      return;
    }
    this.mParams = params
    windowStage.createSubWindow(this.mWindowName ?? 'mySubWindow', (err: BusinessError, data) => {
      if (err.code) {
        console.error("Failed to create the subwindow, Cause: " + JSON.stringify(err));
        return;
      }
      this.subWindow = (data as window.Window);
      if (this.subWindow) {
        // 设置子窗口可触
        this.subWindow.setWindowTouchable(true);
        //设置子窗口不可获焦
        this.subWindow.setWindowFocusable(false);
        // 设置窗口UI
        this.loadContent(params.entryName ?? baseSubWindowPageEntryName ,params.maskColor ?? "#80000000");
        // 展示子窗口
        this.showSubWindow();
      }
    });
  } catch (exception) {
    console.err
  }
}

更多关于HarmonyOS 鸿蒙Next subWindow中跳转页面的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,Next subWindow中跳转页面的问题通常涉及到页面栈管理和窗口生命周期管理。具体操作如下:

  1. 页面栈管理

    • 在HarmonyOS中,页面跳转通常通过Intent来实现。如果你希望在Next subWindow中跳转到另一个页面,你需要创建一个新的Intent,并设置目标页面的URI或类名。
    • 使用Ability.startAbility方法启动目标页面,该方法接收一个Intent对象作为参数。
  2. 窗口生命周期管理

    • 在进行页面跳转时,确保Next subWindow的生命周期状态允许进行跳转操作。例如,避免在窗口销毁或不可见时进行跳转。
    • 跳转后,原窗口可能会进入后台或被销毁,需要处理好相关资源释放和状态保存。
  3. 实现代码示例(非具体代码,仅描述步骤):

    • 创建Intent对象,并设置目标页面信息。
    • 调用Ability.startAbility方法,传入Intent对象。
    • 处理窗口生命周期变化,确保跳转前后资源得到正确管理。

请注意,上述步骤为一般性描述,具体实现可能因项目需求和鸿蒙系统版本而异。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部