HarmonyOS 鸿蒙Next 弹窗消失的问题

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

HarmonyOS 鸿蒙Next 弹窗消失的问题 我们用 CustomDialog 自定义了一个启动页的隐私协议弹窗,我们想实现的效果是,如果用户点同意协议,弹窗才消失并能进入首页,而且需要禁止用户自己关闭弹窗(就是点击弹窗外的区域和返回按钮,都不关闭弹窗)。我们现在设置了 autoCancel,点击空白区域弹窗不消失,但是点击返回按钮弹窗还是会消失,请问这个问题应该怎么解决呢?

3 回复

把返回按钮的回调取消就行

参考onWillDismiss回调:当用户执行点击遮障层关闭、左滑/右滑、三键back、键盘ESC关闭交互操作时,如果注册该回调函数,则不会立刻关闭弹窗。在回调函数中可以通过reason得到阻拦关闭弹窗的操作类型,从而根据原因选择是否能关闭弹窗。当前组件返回的reason中,暂不支持CLOSE_BUTTON的枚举值。

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-methods-custom-dialog-box-V5#ZH-CN_TOPIC_0000001884757950__customdialogcontrolleroptions

@CustomDialog struct CustomDialogExample { cancel?: () => void confirm?: () => void controller: CustomDialogController onBackPress(): boolean | void { return false }

build() { Column() { Text(‘我是内容’).fontSize(20).margin({ top: 10, bottom: 10 }) Flex({ justifyContent: FlexAlign.SpaceAround }) { Button(‘cancel’) .onClick(() => { //取消回调 // this.controller.close() // if (this.cancel) { // this.cancel() // } }).backgroundColor(0xffffff).fontColor(Color.Black)

    Button('confirm')
      .onClick(() => {
        this.controller.close()
        if (this.confirm) {
          this.confirm()
        }
      }).backgroundColor(0xffffff).fontColor(Color.Red)
  }.margin({ bottom: 10 })
}

} }

@Entry @Component struct CustomDialogUser { dialogController: CustomDialogController = new CustomDialogController({ builder: CustomDialogExample({ cancel: ()=> { this.onCancel() }, confirm: ()=> { this.onAccept() }, }),

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

})

onCancel() { console.info(‘Callback when the first button is clicked’) }

onAccept() { console.info(‘Callback when the second button is clicked’) }

build() { Column() { Button(‘click me’) .onClick(() => { this.dialogController.open() }) }.width(‘100%’).margin({ top: 5 }) } }

更多关于HarmonyOS 鸿蒙Next 弹窗消失的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


onWillDismiss:

针对HarmonyOS 鸿蒙Next弹窗消失的问题,可能的原因及解决方法如下:

弹窗消失可能由于以下几种情况导致:

  1. 系统资源回收:当系统资源紧张时,为了保障系统流畅性,可能会回收部分后台进程或UI组件,包括弹窗。此时,需检查系统资源使用情况,优化应用内存管理。

  2. 弹窗超时设置:部分弹窗可能设置了自动消失的时间,当达到设定时间后,弹窗会自动关闭。检查弹窗的创建代码,确认是否有超时设置,并调整至合适的时间。

  3. 用户交互导致:用户可能通过某些操作(如点击屏幕其他区域)导致弹窗消失。检查弹窗的交互逻辑,确保用户操作不会导致非预期的弹窗关闭。

  4. 系统或应用Bug:系统或应用本身可能存在Bug,导致弹窗异常消失。尝试更新系统或应用至最新版本,看问题是否得到解决。

  5. 权限或策略限制:某些情况下,系统权限或策略可能限制弹窗的显示。检查应用权限设置,确保应用具有显示弹窗的必要权限。

如果以上方法均未能解决问题,可能是更深层次的系统或应用问题。此时,建议直接联系官网客服以获取更专业的技术支持。官网地址是:https://www.itying.com/category-93-b0.html

回到顶部