HarmonyOS 鸿蒙Next 全部弹窗内再次打开自定义弹窗后,无法执行promptAction.showToast()方法

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

HarmonyOS 鸿蒙Next 全部弹窗内再次打开自定义弹窗后,无法执行promptAction.showToast()方法

A页面打开通过

GlobalStateDialogManager.getGlobalStateDialogNodeController().setUIContext(this.getUIContext())
GlobalStateDialogManager.operateGlobalStateDialog({ isShowGlobalStateDialog: true })<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

打开B弹窗,然后B弹窗打开new CustomDialogController().open()打开C弹窗,业务场景是想在C弹窗内判断评论是否为空或者操作成功后调用promptAction.showToast()进行操作提示,但是消息框没有提示,但是在B弹窗中是可以执行 promptAction.showToast()方法,但是通过将B的消息框作为回调方法传入C弹窗也是无法弹出消息框。 请问是promptAction.showToast()不支持在自定义弹框中使用吗?如果这样有什么替代方法呢? 官方推荐的 全局状态保留能力弹窗

https://gitee.com/harmonyos-cases/cases/blob/master/CommonAppDevelopment/common/utils/src/main/ets/component/README.md


更多关于HarmonyOS 鸿蒙Next 全部弹窗内再次打开自定义弹窗后,无法执行promptAction.showToast()方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
在A页面同时定义了 自定义弹窗C和全局弹窗B,然后把A页面的自定义弹窗C的代码去掉后,通过将B的回调方法传递给C方法就可以执行promptAction.showToast()了

更多关于HarmonyOS 鸿蒙Next 全部弹窗内再次打开自定义弹窗后,无法执行promptAction.showToast()方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next环境中,如果遇到在全部弹窗内再次打开自定义弹窗后,promptAction.showToast()方法无法执行的问题,通常这是因为弹窗的层级管理或UI线程阻塞所导致。

在鸿蒙系统中,每个弹窗的显示与隐藏均受到系统UI调度器的控制。如果在一个弹窗尚未完全关闭的情况下,又尝试打开另一个弹窗,可能会因为UI线程的状态冲突,导致后打开的弹窗无法正常执行其内部的UI操作,如showToast()

解决方案需要确保:

  1. 弹窗间的操作遵循正确的时序逻辑,避免在同一UI线程中连续触发弹窗。
  2. 可以在第一个弹窗关闭的回调中,触发第二个弹窗的显示及其相关UI操作。
  3. 检查是否存在全局UI操作被意外阻塞的情况,例如,使用同步等待可能导致UI线程无法及时响应新的弹窗请求。

具体到代码实现,可尝试在第一个弹窗的关闭事件处理器中,安全地启动第二个弹窗,并在其内部调用showToast()。确保每次弹窗操作后,UI线程有足够的时间响应并处理新任务。

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

回到顶部