HarmonyOS 鸿蒙Next promptAction.openCustomDialog如何弹出全局自定义弹窗

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

HarmonyOS 鸿蒙Next promptAction.openCustomDialog如何弹出全局自定义弹窗

【关键字】

  • promptAction
  • openCustomDialog
  • 全局
  • 弹窗

【问题描述】

promptAction.openCustomDialog 应该如何弹出全局自定义弹窗?

【解决方案】

promptAction.openCustomDialog 全局弹窗参考代码如下:

一、新建3个工具类

1、GlobalContext.ets

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);
}
}

2、DialogUtils.ets

import { promptAction } from '@kit.ArkUI'
import { GlobalContext } from './GlobalContext'

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

function getCustomDialogId() {
// 取customDialogId
let customDialogId = GlobalContext.getContext().getObject('customDialogId') as number
return customDialogId;
}

3、HttpUtil.ets

import { GlobalContext } from './GlobalContext';
import { promptAction } from '@kit.ArkUI';
import { customDialogBuilder } from './DialogUtils';

export function testPromptDialog() {
// 方法调用后使用弹窗
// 使用GlobalContext中UIContext
const that = GlobalContext.getContext().getObject('UIContext') as UIContext;
if (that) {
promptAction.openCustomDialog({
builder: customDialogBuilder.bind(that, "网络请求失败!")
}).then((dialogId: number) => {
GlobalContext.getContext().setObject('customDialogId', dialogId)
})
}

二、页面测试弹窗效果

1、Index.ets

import { GlobalContext } from '../utils/GlobalContext'
import { router } from '@kit.ArkUI'

@Entry
@Component
struct Index {
aboutToAppear(): void {
// 存入UIContext与customDialogId
GlobalContext.getContext().setObject('UIContext', this)
GlobalContext.getContext().setObject('customDialogId', 0)
}

build() {
Row() {
Column() {
Button("跳转其他页面")
.onClick(() => {
router.pushUrl({ url: "pages/Page2" })
})
}
.width('100%')
}
.height('100%')
}
}

2、Page2.ets

import { testPromptDialog } from '../utils/HttpUtil';

@Entry
@Component
struct Page2 {
@State message: string = 'Hello World';

build() {
Row() {
Column() {
Button("promptAction弹窗")
.onClick(() => {
testPromptDialog()
})
}
.width('100%')
}
.height('100%')
}
}

更多关于HarmonyOS 鸿蒙Next promptAction.openCustomDialog如何弹出全局自定义弹窗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next promptAction.openCustomDialog如何弹出全局自定义弹窗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,promptAction.openCustomDialog 方法用于弹出全局自定义弹窗。为了使用该功能,你需要按照以下步骤操作:

  1. 定义自定义弹窗布局:首先,在XML布局文件中定义你的自定义弹窗的布局。这包括你希望弹窗中显示的所有UI元素,如文本、按钮等。

  2. 创建自定义弹窗实例:在你的JavaScript或TypeScript代码中,通过prompt.createCustomDialog方法创建一个自定义弹窗实例。在创建时,传入你的布局文件的ID以及弹窗的标题和按钮信息(如果有的话)。

  3. 设置弹窗行为:你可以为弹窗的按钮设置点击事件,以定义用户点击按钮后的行为。

  4. 显示弹窗:使用promptAction.openCustomDialog方法显示你创建的自定义弹窗。

示例代码(假设使用的是ArkUI框架):

// 创建自定义弹窗
let dialog = prompt.createCustomDialog({
    title: '提示',
    content: yourLayoutId, // 你的布局ID
    buttons: [
        {
            text: '确定',
            action: () => {
                // 点击确定按钮后的行为
            }
        }
    ]
});

// 显示弹窗
promptAction.openCustomDialog(dialog);

请注意,上述代码是基于ArkUI框架的假设示例,具体实现可能因你的项目配置和使用的框架版本而有所不同。

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

回到顶部