HarmonyOS 鸿蒙Next 如何在一个非@Entry的类中创建一个CustomDialogController弹窗

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

HarmonyOS 鸿蒙Next 如何在一个非@Entry的类中创建一个CustomDialogController弹窗

我目前在class类中创建弹窗对象并调用open()方法无法正常弹窗,示例代码如下:

export class PopWindowUtil {
  //弹窗
  alertDialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialogAlertView({
      title: '温馨提示',
      message: '测试信息',
      confirm: () => {
        this.alertDialogController.close();
      },
      confirmText: '知道了'
    }),
    alignment: DialogAlignment.Center,
    customStyle: true,
    autoCancel: false
  })

  initialize() {
    this.alertDialogController.open();
  }
}


更多关于HarmonyOS 鸿蒙Next 如何在一个非@Entry的类中创建一个CustomDialogController弹窗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

参考demo:

import { GlobalContext } from './GlobalContext'
import { testPromptDialog } from './HttpUtil'

@Entry @Component struct Index { @State message: string = ‘Hello World’

aboutToAppear(): void { GlobalContext.getContext().setObject(‘UIContext’, this) }

build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) .onClick(() => { testPromptDialog() }) } .width(‘100%’) } .height(‘100%’)

.backgroundColor(Color.Orange)

} }

export class GlobalContext { private constructor() { }

private static instance: GlobalContext; private _objects = new Map<string, Object>();

public static getContext(): GlobalContext { if (!GlobalContext.instance) { GlobalContext.instance = new GlobalContext(); } return GlobalContext.instance; }

getObject(value: string): Object | undefined { return this._objects.get(value); }

setObject(key: string, objectClass: Object): void { this._objects.set(key, objectClass); } }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

import { promptAction } from ‘@kit.ArkUI’;
import { GlobalContext } from ‘./GlobalContext’;

let customDialogId: number = 0

@Builder export function customDialogBuilder(content: String) { Column() { Text(Tip: ${content}).fontSize(20).height(“30%”) Text(‘失败原因:!!!’).fontSize(16).height(“30%”) Row() { Button(“确认”).onClick(() => { promptAction.closeCustomDialog(customDialogId) }) Blank().width(50) Button(“取消”).onClick(() => { promptAction.closeCustomDialog(customDialogId) }) } .margin({ top: 30 }) }.height(200).padding(5) }

export function testPromptDialog() {

const that = GlobalContext.getContext().getObject(‘UIContext’) as UIContext; if (that) { promptAction.openCustomDialog({ builder: customDialogBuilder.bind(that, “网络请求失败!”) }).then((dialogId: number) => { customDialogId = dialogId; }) } }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

更多关于HarmonyOS 鸿蒙Next 如何在一个非@Entry的类中创建一个CustomDialogController弹窗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,若要在非@Entry类中创建一个CustomDialogController弹窗,可以按照以下步骤进行:

  1. 定义弹窗布局:首先,在resources/layout目录下定义一个XML文件,用于描述弹窗的布局。

  2. 创建CustomDialogController:在非@Entry类中,通过CustomDialogController的构造函数创建一个实例。构造函数通常需要传入上下文和弹窗布局的资源ID。

  3. 设置弹窗属性:可以使用CustomDialogController提供的方法设置弹窗的属性,如标题、按钮等。

  4. 显示弹窗:通过调用show方法,将弹窗显示出来。通常,这个方法会返回一个布尔值,表示弹窗是否成功显示。

示例代码:

// 假设在非@Entry类中
CustomDialogController dialogController = new CustomDialogController(this, ResourceTable.Layout_dialog_layout);
dialogController.setTitle("弹窗标题");
// 设置其他属性...
boolean isShown = dialogController.show();
if (isShown) {
    // 弹窗成功显示
} else {
    // 弹窗显示失败
}

注意:上述代码为示意性代码,实际开发中需根据具体需求调整。this代表当前类的上下文,需确保在非@Entry类中能正确获取。

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

回到顶部