HarmonyOS鸿蒙Next中实现公共等待对话框时显示不出来怎么办?

HarmonyOS鸿蒙Next中实现公共等待对话框时显示不出来怎么办?

实现代码如下

@CustomDialog
export struct WaitingDialog {
  private static controller: CustomDialogController = new CustomDialogController({
    builder: WaitingDialog(),
    customStyle: false,
    alignment: DialogAlignment.Center,
    showInSubWindow: true
  })
  controller: CustomDialogController

  public static open(): void {
    WaitingDialog.controller.open()
  }

  public static close(): void {
    WaitingDialog.controller.close()
  }

  build() {
    Column() {
      LoadingProgress()
        .size({ width: 60, height: 60 })
        .alignSelf(ItemAlign.Center)
    }
    .size({ width: 120, height: 120 })
    .backgroundColor(Color.White)
    .justifyContent(FlexAlign.Center)
    .alignItems(HorizontalAlign.Center)
    .borderRadius(30)
  }
}

在其他地方调用WaitingDialog.open() 无法开启等待对话框


更多关于HarmonyOS鸿蒙Next中实现公共等待对话框时显示不出来怎么办?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

不写入open()方法,在其他页面这个组件的时候在定义一下就可以调用open()方法了, 具体代码如下:

@CustomDialog
export struct CustomDialogExample {
controller?: CustomDialogController
build() {
Column() {
LoadingProgress()
.size({ width: 60, height: 60 })
.alignSelf(ItemAlign.Center)
}
.size({ width: 120, height: 120 })
.backgroundColor(Color.White)
.justifyContent(FlexAlign.Center)
.alignItems(HorizontalAlign.Center)
.borderRadius(30)
}
}

index.ets 就是调用`WaitingDialog`的页面
import { CustomDialogExample } from './WaitingDialog'
@Entry
@Component
struct CustomDialogUser {
@State inputValue: string = 'click me'
dialogController: CustomDialogController | null = new CustomDialogController({
builder: CustomDialogExample(),
customStyle: false,
alignment: DialogAlignment.Center,
showInSubWindow: true
})
// 在自定义组件即将析构销毁时将dialogControlle置空
aboutToDisappear() {
this.dialogController = null
}

build() {
Column() {
Button(this.inputValue)
.onClick(() => {
if (this.dialogController != null) {
this.dialogController.open()
}
}).backgroundColor(0x317aff)
}.width('100%').margin({ top: "50%" })
}
}

更多关于HarmonyOS鸿蒙Next中实现公共等待对话框时显示不出来怎么办?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你这写法不对把,参考:

@Entry
@Component
struct Index1 {
  controller: CustomDialogController = new CustomDialogController({
    builder: WaitingDialog(),
    customStyle: false,
    alignment: DialogAlignment.Center,
    showInSubWindow: true
  })

  build() {
    Button("AAAAAAAAAA")
      .onClick(() => {
        this.controller.open()
      })
  }
}

@CustomDialog
struct WaitingDialog {
  controller?: CustomDialogController
  cancel: () => void = () => {
  }
  confirm: () => void = () => {
  }
  build() {
    Column() {
      LoadingProgress()
        .size({ width: 60, height: 60 })
        .alignSelf(ItemAlign.Center)
    }
    .size({ width: 120, height: 120 })
    .backgroundColor(Color.White)
    .justifyContent(FlexAlign.Center)
    .alignItems(HorizontalAlign.Center)
    .borderRadius(30)
  }
}

在HarmonyOS鸿蒙Next中实现公共等待对话框时显示不出来,可能是由于以下几个原因:

  1. UI线程阻塞:如果对话框的显示操作在UI线程中被阻塞,对话框将无法显示。确保对话框的显示操作在UI线程中执行,并且没有长时间运行的任务阻塞该线程。

  2. 生命周期问题:对话框的显示可能发生在组件的生命周期方法中,如onCreateonResume。如果这些方法在执行过程中被中断或过早结束,对话框可能无法显示。确保对话框的显示操作在正确的生命周期方法中执行。

  3. 权限问题:某些对话框可能需要特定的权限才能显示。检查是否已经授予了必要的权限,如SYSTEM_ALERT_WINDOW

  4. 资源问题:如果应用程序的资源(如内存或CPU)被过度占用,可能导致对话框无法显示。检查应用程序的资源使用情况,确保有足够的资源供对话框使用。

  5. 代码逻辑错误:检查对话框的显示逻辑,确保没有逻辑错误导致对话框无法显示。例如,确保对话框的show方法被正确调用,并且没有条件语句阻止其执行。

  6. 兼容性问题:鸿蒙Next可能存在与特定设备或系统版本的兼容性问题。确保应用程序在目标设备或系统版本上进行了充分测试。

  7. 对话框配置错误:检查对话框的配置,如布局文件、样式和主题,确保它们正确无误。错误的配置可能导致对话框无法正确显示。

  8. 系统设置:某些系统设置可能影响对话框的显示,如省电模式或开发者选项中的设置。检查这些设置,确保它们不会干扰对话框的显示。

通过以上步骤,可以排查并解决鸿蒙Next中公共等待对话框无法显示的问题。

在HarmonyOS鸿蒙Next中,公共等待对话框无法显示可能是由于以下原因:

  1. UI线程阻塞:确保对话框的显示操作在主线程执行,避免耗时操作阻塞UI线程。
  2. 生命周期问题:检查对话框的创建和显示是否在正确的生命周期方法中执行,如onStart()onResume()
  3. 权限问题:确认应用拥有显示对话框的权限,尤其是悬浮窗权限。
  4. 上下文错误:确保使用的Context对象正确,避免使用已销毁的ActivityFragment上下文。
  5. 样式或主题冲突:检查应用的样式或主题是否影响了对话框的显示。

建议使用ProgressDialogAlertDialog,并确保在正确的生命周期和线程中调用show()方法。

回到顶部