HarmonyOS 鸿蒙Next dialog如何close?

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next dialog如何close?
如下:this.controller.close 直接崩溃?
 

@CustomDialog
export struct ViewBoardCustomDialog {
controller: CustomDialogController = new CustomDialogController({ builder: ViewBoardCustomDialog() })
onStart: (isReadOnly: boolean) => void = (isReadOnly: boolean) => {

}

build() {
Column() {
Button("创建只读白板").onClick(e => {
this.onStart(true);
}).margin({ top: 10, bottom: 10 })
Button("创建读写白板").onClick(e => {
this.onStart(false);
}).margin({ top: 10, bottom: 10 })

}

}
}

更多关于HarmonyOS 鸿蒙Next dialog如何close?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

麻烦试一下这个demo:


[@CustomDialog](/user/CustomDialog)

struct CustomDialogExample {

  controller?: CustomDialogController

  cancel: () => void = () => {

  }

  confirm: () => void = () => {

  }

  build() {

    Column() {

      Text('可展示在主窗口外的弹窗')

        .fontSize(30)

        .height(100)

      Button('点我关闭弹窗')

        .onClick(() => {

          if (this.controller != undefined) {

            this.controller.close()

            console.log('关闭成功')

          }

          else{

            console.log('关闭失败')

          }

        })

        .margin(20)

    }

  }

}

[@Entry](/user/Entry)

[@Component](/user/Component)

struct CustomDialogUser {

  dialogController: CustomDialogController | null = new CustomDialogController({

    builder: CustomDialogExample({

      cancel: ()=> { this.onCancel() },

      confirm: ()=> { this.onAccept() }

    }),

    cancel: this.existApp,

    autoCancel: true,

    alignment: DialogAlignment.Center,

    offset: { dx: 0, dy: -20 },

    gridCount: 4,

    showInSubWindow: true,

    isModal: true,

    customStyle: false,

    cornerRadius: 10,

  })

  // 在自定义组件即将析构销毁时将dialogControlle置空

  aboutToDisappear() {

    this.dialogController = null // 将dialogController置空

  }

  onCancel() {

    console.info('Callback when the first button is clicked')

  }

  onAccept() {

    console.info('Callback when the second button is clicked')

  }

  existApp() {

    console.info('Click the callback in the blank area')

  }

  build() {

    Column() {

      Button('click me')

        .onClick(() => {

          if (this.dialogController != null) {

            this.dialogController.open()

          }

        }).backgroundColor(0x317aff)

    }.width('100%').margin({ top: 5 })

  }

}

更多关于HarmonyOS 鸿蒙Next dialog如何close?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙系统)中,关闭对话框(Dialog)的操作通常涉及调用Dialog对象的相应方法。如果你正在使用Java或Kotlin进行开发,关闭Dialog的通用方法是通过调用其dismiss()方法。以下是一个简要的步骤说明和示例代码:

  1. 获取Dialog对象:确保你已经创建并显示了Dialog对象。

  2. 调用dismiss方法:在需要关闭Dialog的地方,调用该对象的dismiss()方法。

示例代码(Java):

AlertDialog dialog = new AlertDialog.Builder(this)
    .setTitle("Title")
    .setMessage("Message")
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            // 关闭Dialog
            dialogInterface.dismiss();
        }
    })
    .create();
dialog.show();
// 如果需要在其他地方关闭Dialog,可以直接调用
// dialog.dismiss();

在Kotlin中,操作类似,只是语法略有不同。

如果Dialog是通过某种框架或库创建的,确保查阅该框架或库的文档,以了解是否有特定的关闭方法或生命周期管理要求。

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

回到顶部