HarmonyOS鸿蒙Next中A页面跳B页面,当A有CustomDialog显示时也在B页面上

HarmonyOS鸿蒙Next中A页面跳B页面,当A有CustomDialog显示时也在B页面上 A,B俩页面,

A页面需要显示一个Dialog,然后点击Dialog内容跳转到B,用的router.pushurl,此时Dialog覆盖在了B页面上,有啥办法能让B盖住整个A吗(包括Dialog)?

3 回复

在以前的版本会自动关闭弹窗,从5.0.0.17版本(api12)后弹窗规格变化不会自动关闭,使用router切换时始终展示在最上层。

规格说明:对话框在页面路由跳转时关闭行为变更

需要手动调用close方法在跳转时关闭弹窗,返回后重新拉起

更多关于HarmonyOS鸿蒙Next中A页面跳B页面,当A有CustomDialog显示时也在B页面上的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,如果A页面跳转到B页面时,A页面的CustomDialog仍然显示在B页面上,这是因为CustomDialog的生命周期与页面的生命周期不完全绑定。CustomDialog通常是通过show()方法显示的,它在显示时会脱离当前页面的生命周期控制,因此即使页面发生跳转,CustomDialog也不会自动消失。

要解决这个问题,可以在A页面跳转到B页面之前,手动调用CustomDialog的dismiss()方法,确保在页面跳转时对话框被关闭。例如:

// A页面代码
let customDialog = new CustomDialog()
customDialog.show()

// 跳转到B页面之前
customDialog.dismiss()
// 执行页面跳转逻辑

在HarmonyOS鸿蒙Next中,如果A页面有CustomDialog显示时跳转到B页面,CustomDialog默认不会自动消失,它仍然会显示在B页面上。这是因为CustomDialog是全局的,不受页面切换影响。若希望在跳转时关闭CustomDialog,可以在跳转前手动调用dialog.dismiss()方法关闭对话框。例如:

CustomDialog dialog = new CustomDialog(context);
// 显示对话框
dialog.show();
// 跳转页面前关闭对话框
dialog.dismiss();
Intent intent = new Intent(context, BPage.class);
context.startAbility(intent);

这样可以确保跳转时对话框关闭。

回到顶部