HarmonyOS 鸿蒙Next customdialog在静态工具类中无法弹出

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

HarmonyOS 鸿蒙Next customdialog在静态工具类中无法弹出

@CustomDialog
struct CustomDialogExample {
  @Prop textValue: string
  controller?: CustomDialogController

  build() {
    Column() {
      Text(this.textValue).fontSize(20).margin({ top: 10, bottom: 10 })
    }.borderRadius(10)
  }
}

class Test {
  static INSTANCE = new Test();
  dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialogExample({
      textValue: '123',
    }),
    autoCancel: true,
    onWillDismiss: (dismissDialogAction: DismissDialogAction) => {
      console.info("reason=" + JSON.stringify(dismissDialogAction.reason))
      console.log("dialog onWillDismiss")
      if (dismissDialogAction.reason == DismissReason.PRESS_BACK) {
        dismissDialogAction.dismiss()
      }
      if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) {
        dismissDialogAction.dismiss()
      }
    },
  })

  show() {
    this.dialogController.open();
  }
}


@Entry
@Component
struct CustomDialogUser {
  @State textValue: string = 'test'
  dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialogExample({
      textValue: '123',
    }),
    autoCancel: true,
    onWillDismiss: (dismissDialogAction: DismissDialogAction) => {
      console.info("reason=" + JSON.stringify(dismissDialogAction.reason))
      console.log("dialog onWillDismiss")
      if (dismissDialogAction.reason == DismissReason.PRESS_BACK) {
        dismissDialogAction.dismiss()
      }
      if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) {
        dismissDialogAction.dismiss()
      }
    },
  })

  build() {
    Column() {
      Button('使用静态工具类弹出窗口')
        .onClick(() => {
          Test.INSTANCE.show();  //这个无法弹出弹窗
        })
      Button('使用成员对象弹出窗口')
        .onClick(() => {
          this.dialogController.open();
        })
    }.width('100%').margin({ top: 5 })
  }
}

更多关于HarmonyOS 鸿蒙Next customdialog在静态工具类中无法弹出的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
目前CustomDialog不支持在class中封装,因为弹窗需要根据上下文来弹出。

更多关于HarmonyOS 鸿蒙Next customdialog在静态工具类中无法弹出的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


看着是挺蹊跷的

在HarmonyOS鸿蒙系统中,Next customdialog在静态工具类中无法弹出的问题通常与Dialog的生命周期和上下文(Context)管理有关。静态工具类由于没有与Activity或Ability直接的生命周期关联,因此难以正确管理Dialog的显示。

Dialog需要一个有效的Context来显示,这个Context通常应该是一个Activity或Ability的实例,因为它们包含了用户界面和生命周期管理。在静态工具类中,由于没有绑定到具体的Activity或Ability实例,直接创建并显示Dialog会导致Context不符合要求,从而无法弹出。

解决方案是避免在静态工具类中直接创建和显示Dialog。相反,应该在Activity或Ability中创建并管理Dialog的显示。如果需要在多个地方复用Dialog的逻辑,可以考虑将Dialog的创建和配置逻辑封装成一个非静态的方法,并在需要时从Activity或Ability中调用这个方法。

例如,可以在Activity中定义一个公共方法用于创建和显示Dialog,然后在需要显示Dialog的地方调用这个方法。这样可以确保Dialog有一个有效的Context来显示。

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

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!