HarmonyOS 鸿蒙Next如何传参数给CustomDialog自定义弹窗?

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

HarmonyOS 鸿蒙Next如何传参数给CustomDialog自定义弹窗?

您好,我现在使用CustomDialog开发底部的弹窗,同一个弹窗可能些许的UI变化,根据数据来定,比如文字显示成功或者失败等等,但我发现CustomDialog并没提供传参的方法,难道我每一种样式都有创建一种新的弹窗?这代码也太冗余了吧,明明可以传递一个参数进来决定不同的UI啊。能帮我想想办法吗?有其他实现方法吗?

2 回复

可以参考开发指南实现。链接如下:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-promptaction-V5

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

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](/user/kit).ArkUI'

import { GlobalContext } from './GlobalContext'

[@Builder](/user/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](/user/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)

})

}

}

4、使用弹窗

[@Entry](/user/Entry)

[@Component](/user/Component)

struct Index {

  aboutToAppear(): void {

    GlobalContext.getContext().setObject('UIContext', this)

    GlobalContext.getContext().setObject('customDialogId', 0)

  }

  build() {

    Button("promptAction弹窗")

      .onClick(() => {

        testPromptDialog()

      })

  }

}

更多关于HarmonyOS 鸿蒙Next如何传参数给CustomDialog自定义弹窗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,传递参数给CustomDialog自定义弹窗可以通过以下方式实现:

  1. 创建CustomDialog类:首先,定义一个CustomDialog类,继承自Dialog或自定义Dialog基类。在CustomDialog类中,可以定义一个或多个构造函数,用于接收外部传递的参数。例如,可以定义一个String类型的参数用于显示内容。

  2. 在构造函数中接收参数:在CustomDialog的构造函数中,添加参数接收逻辑,并将这些参数保存到类的成员变量中。这样,在CustomDialog的生命周期内,可以随时访问这些参数。

  3. 在Dialog布局中使用参数:在CustomDialog的布局文件中,可以使用这些参数来动态设置UI元素的内容。例如,通过setText方法将传递的字符串参数设置到TextView上。

  4. 实例化并显示CustomDialog:在需要显示CustomDialog的地方,创建CustomDialog的实例,并传递所需的参数。然后,调用show方法显示Dialog。

示例代码(简化):

// CustomDialog.java
public class CustomDialog extends Dialog {
    private String message;

    public CustomDialog(@NonNull Context context, String message) {
        super(context);
        this.message = message;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_custom);
        TextView textView = findViewById(R.id.textView);
        textView.setText(message);
    }
}

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

回到顶部