当前位置: 首页 > news >正文

鸿蒙开发:openCustomDialog关闭指定Dialog

前言

本文基于Api13

openCustomDialog弥补了CustomDialogController在使用上存在的诸多限制,实现了可以在任意位置上弹出,可以说是非常的方便;但是,在使用的时候遇到了一些小阻碍,比如一个页面中可能存在多个弹窗,而这些弹窗的隐藏顺序是不确定的,如何可以根据一定的条件,隐藏其中对应的弹窗呢,也就是,如何隐藏指定的弹窗,而不是最上层的弹窗。

目前呢,有两种实现方式,一种是通过存储ComponentContent来实现,另一种就是通过存储dialogId来实现,那么我们本篇文章,就针对这两种实现方式一一进行举例说明。

存储ComponentContent实现关闭指定Dialog

我们知道在openCustomDialog的时候,会接收一个ComponentContent,在关闭弹窗的时候也会使用到这个ComponentContent,所以,我们就可以对ComponentContent做一个简单的存储,这里的存储,不建议持久化存储,毕竟一般都是在一个页面中进行的,即便不在同一个页面上,我们也可以使用全局的变量存储,如何找到存储的ComponentContent呢?,这里推荐使用HashMap,键值对这种形式存储,可以很方便的使用key找到对应的value。

弹出Dialog

在弹窗弹出之后,使用map集合进行存储,在弹出Dialog的时候,需要传一个标识,也就是这个Dialog对应的key。

 private showDialog(key: string) {
    let uiContext = this.getUIContext()
    let promptAction = uiContext.getPromptAction()
    let contentNode = new ComponentContent(uiContext, wrapBuilder(TextDialog))
    promptAction.openCustomDialog(contentNode).then(() => {
      //临时存储
      this.mCustomDialogMap.set(key, contentNode)
    })
  }

隐藏Dialog

隐藏的时候,直接传递对应的key即可,记得,隐藏之后移除map中的元素。

private hideDialog(key: string) {
    if (this.mCustomDialogMap.hasKey(key)) {
      let uiContext = this.getUIContext()
      let promptAction = uiContext.getPromptAction()
      let contentNode = this.mCustomDialogMap.get(key)
      promptAction.closeCustomDialog(contentNode).then(() => {
        //隐藏之后删除
        this.mCustomDialogMap.remove(key)
      })
    }
  }

存储dialogId实现关闭指定Dialog

存储dialogId和存储ComponentContent逻辑上基本上是一致的,但是显示出UI的方式需要切换下,由于dialogId的获取,必须通过builder的方式,所以这里,传递ComponentContent改为内部定义的@Builder,如果想要使用全局的UI组件,可以在定义的Builder里进行。

弹出Dialog

private showDialog(key: string) {
    let uiContext = this.getUIContext()
    let promptAction = uiContext.getPromptAction()
    promptAction.openCustomDialog({
      builder: () => {
        this.TextDialog(message)
      }
    }).then((dialogId: number) => {
      this.mCustomDialogMap.set(key, dialogId)
    })
  }

隐藏Dialog

private hideDialog(key: string) {
    if (this.mCustomDialogMap.hasKey(key)) {
      let uiContext = this.getUIContext()
      let promptAction = uiContext.getPromptAction()
      let dialogId = this.mCustomDialogMap.get(key)
      promptAction.closeCustomDialog(dialogId)
      //隐藏之后删除
      this.mCustomDialogMap.remove(key)
    }
  }

相关总结

以上呢就是两种隐藏指定的Dialog方式,比较的简单,具体的场景,常见于,页面多个弹出Dialog,但是需要隐藏指定的Dialog场景,当然了,也适用于常见的普通场景。


文章转载自:

http://0QBwuWFK.zkdmk.cn
http://8lv2hGsk.zkdmk.cn
http://jVgOZeMr.zkdmk.cn
http://pXuoe8Yu.zkdmk.cn
http://Dg27EXdd.zkdmk.cn
http://DhlFKGak.zkdmk.cn
http://NIIUp4tS.zkdmk.cn
http://qOxdLnc6.zkdmk.cn
http://YNXMYYUJ.zkdmk.cn
http://VoRBiMtk.zkdmk.cn
http://CMBmZNnR.zkdmk.cn
http://g07CNMeL.zkdmk.cn
http://rx2p8JuH.zkdmk.cn
http://HI1DeiKz.zkdmk.cn
http://YULnpZGX.zkdmk.cn
http://maECEL1J.zkdmk.cn
http://2KfLpgar.zkdmk.cn
http://Ke9QWE2N.zkdmk.cn
http://YbU4Fd7G.zkdmk.cn
http://S17gILNx.zkdmk.cn
http://IBQFn0Br.zkdmk.cn
http://ZVUjAzyM.zkdmk.cn
http://G7bL5gBb.zkdmk.cn
http://RbNJdqCT.zkdmk.cn
http://RF2F1yV3.zkdmk.cn
http://wnfTGbsZ.zkdmk.cn
http://Tx8zVoHc.zkdmk.cn
http://v2UksnGz.zkdmk.cn
http://oHZCkcmI.zkdmk.cn
http://pVFvkn3q.zkdmk.cn
http://www.dtcms.com/a/89783.html

相关文章:

  • Axure RP9.0 教程:左侧菜单列表导航 ( 点击父级菜单,子菜单自动收缩或展开)【响应式的菜单导航】
  • Qt在模块依靠情况下资源文件名称和资源名称的使用限制
  • 微服务架构-Feign声明式调用
  • BoomCut AI 技术创建本地化的营销视频
  • three入门,创建一个长方体、认识场景、模型、光源、相机?渲染器
  • 【蓝桥杯】真题 路径(数论+dp)
  • 苹果企业签名经常掉签吗?
  • 类与对象(三)
  • uv - Getting Started 开始使用 [官方文档翻译]
  • 1.认识Excel
  • LRU算法实现
  • 学习 - C++ 全栈聊天项目(1)架构概述和登录界面
  • 内核编程十三:进程状态详解
  • leetcode 用队列模拟栈
  • S32K144外设实验(七):FTM输出多路互补带死区PWM
  • 【MySQL】监控MySQL
  • C++值传递和引用传递
  • 【AI学习笔记】AI造神时代的潘式理论与智能进化
  • 定长内存池原理及实现
  • 电脑干货:万能驱动--EasyDrv8
  • Go 语言封装邮件发送功能
  • 亮数据爬取API爬取亚马逊电商平台实战教程
  • Springboot应用配置github自动流部署 深入理解CI/CD:构建、测试和部署的自动化完整流程
  • 千变万化的卷积
  • HarmonyOS 之 @Require 装饰器自学指南
  • 字符串常量,数组和指针的不同形式
  • 2000-2019年各省地方财政契税数据
  • 记一次线上程序宕机问题分析【写 GC 日志导致进程挂起】
  • 比较Linux的Shell的 `EOF` 与 `echo` 与 `printf` , 将文本输出到文件
  • 003-51单片机-最小系统