HarmonyOS鸿蒙Next中自定义Dialog如何监听弹出状态

HarmonyOS鸿蒙Next中自定义Dialog如何监听弹出状态 自定义一个Dialog,打开,关闭都使用 controller控制,如何监听 Dialog 是打开还是关闭?有没有比较好的方案。

目前采用了在在自定义Dialog中aboutToAppear 中加 show = true, aboutToDiaAppear中 show = false, 然后 show@Link,外部调用方可知

这个方式存在的问题是

if(!this.show){ this.dialogController.open() } if(!this.show){ this.dialogController.open() } 

连续调用2次会弹2个框,有没有好点的dialog状态获取的解决方案

@CustomDialog
export struct BottomListDialog {
  controller?: CustomDialogController
 
  @Link isShow:boolean

  aboutToAppear(): void {
    this.isShow = true
  }

  aboutToDisappear(): void {
    this.isShow = false
  }
dialogController: CustomDialogController = new CustomDialogController({
    builder: BottomListDialog({
      isShow: this.isShow
    }),
    autoCancel: true,
    alignment: DialogAlignment.Bottom,
    customStyle: true
  })

更多关于HarmonyOS鸿蒙Next中自定义Dialog如何监听弹出状态的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

目前无直接监听弹窗打开关闭api,可以在打开关闭时,设置state变量,通过变量间接判断

更多关于HarmonyOS鸿蒙Next中自定义Dialog如何监听弹出状态的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,自定义Dialog可以通过DialogController来监听弹出状态。DialogController提供了onShowonDismiss方法,分别用于监听Dialog的显示和隐藏事件。

具体实现步骤如下:

  1. 创建自定义Dialog时,实例化DialogController
  2. onShow方法中处理Dialog显示时的逻辑。
  3. onDismiss方法中处理Dialog隐藏时的逻辑。

示例代码如下:

import { DialogController } from '@ohos.arkui.dialog';

class CustomDialog {
  private dialogController: DialogController = new DialogController();

  showDialog() {
    this.dialogController.showDialog({
      onShow: () => {
        // Dialog显示时的逻辑
      },
      onDismiss: () => {
        // Dialog隐藏时的逻辑
      }
    });
  }
}

通过这种方式,可以在自定义Dialog中监听其弹出状态。

在HarmonyOS鸿蒙Next中,可以通过DialogsetOnShowListenersetOnDismissListener方法来监听Dialog的弹出和关闭状态。具体实现如下:

  1. 设置显示监听:使用setOnShowListener监听Dialog的弹出。
  2. 设置关闭监听:使用setOnDismissListener监听Dialog的关闭。

示例代码:

Dialog dialog = new Dialog(context);
dialog.setOnShowListener(dialogInterface -> {
    // Dialog显示时的操作
});
dialog.setOnDismissListener(dialogInterface -> {
    // Dialog关闭时的操作
});
dialog.show();
回到顶部