当我们需要获知AlertDialog是否正在显示,我那个往我们会用到isShowing()方法,针对隐藏dialog的方法主要有三种:cancel()、hide()、dismiss()。但是不是调用这三个方法中的任意一个都能让dialog .isShowing()返回false。

我们需要看一下源码:

既然我们想调用isShowing()方法来判断dialog是否正在显示,那么我们就必须先看看这个方法的实现:

    /*** @return Whether the dialog is currently showing.*/public boolean isShowing() {return mShowing;}

很简单,就是返回了这么一个boolean型的变量,这个变量很明显是用来标识dialog是否正在显示的。

要想知道三个方法是否都能让isShowing()方法返回false,那么我们就需要看看三个方法是怎样影响mShowing这个变量的!

首先来看一下cancel方法的源码:

    /*** Cancel the dialog.  This is essentially the same as calling {@link #dismiss()}, but it will* also call your {@link DialogInterface.OnCancelListener} (if registered).*/@Overridepublic void cancel() {if (!mCanceled && mCancelMessage != null) {mCanceled = true;// Obtain a new message so this dialog can be re-usedMessage.obtain(mCancelMessage).sendToTarget();}dismiss();}

可见最终调用了dismiss方法。

接下来看dismiss方法:

    /*** Dismiss this dialog, removing it from the screen. This method can be* invoked safely from any thread.  Note that you should not override this* method to do cleanup when the dialog is dismissed, instead implement* that in {@link #onStop}.*/@Overridepublic void dismiss() {if (Looper.myLooper() == mHandler.getLooper()) {dismissDialog();} else {mHandler.post(mDismissAction);}}

dismiss方法调用了dismissDialog(),那我们还得去看看dismissDialog()方法的源码:

    void dismissDialog() {if (mDecor == null || !mShowing) {return;}if (mWindow.isDestroyed()) {Log.e(TAG, "Tried to dismissDialog() but the Dialog's window was already destroyed!");return;}try {mWindowManager.removeViewImmediate(mDecor);} finally {if (mActionMode != null) {mActionMode.finish();}mDecor = null;mWindow.closeAllPanels();onStop();mShowing = false;sendDismissMessage();}}

看到这里似乎很明显了,cancel()和dismiss()两个方法都给mShowing变量赋值为false了。

那么,hide()方法呢?来看一下源码:

    /*** Hide the dialog, but do not dismiss it.*/public void hide() {if (mDecor != null) {mDecor.setVisibility(View.GONE);}}

hide()方法没有调用任何其他的方法,就这么短短三行,只是把dialog设置成了GONE。。因此,hide()方法并没有改变mShowing的值。

看到这里我们就知道为什么我说三个方法不是都能让isShowing方法返回准确的值了。

所以,如果你需要用isShowing方法判断dialog是否正在显示,记得在隐藏dialog的时候不要使用hide方法。

关于AlertDialog的小坑相关推荐

  1. net core mysql 连接池_EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽

    EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽 发布时间:2019-02-18 22:05, 浏览次数:1152 , 标签: EF Core DbContextPool ...

  2. mciSendString 的两个小坑

    刚刚修正了自己用的小闹钟的代码. 坑1:REPEAT 选项的作用范围 原来用得好好的,之后选择 .wav 文件,居然不出声音了-- 诶,MCI 肯定支持 .wav 的啊-- 仔细想想,我以前都是选 . ...

  3. 小坑记录:get_cmap参数区分大小写

    小坑记录: plt.cm.get_cmap('spectral', 10) File "C:\Users\sanye\AppData\Local\Programs\Python\Python ...

  4. ThinkPHP开发中遇到的小坑

    TP不得不说是现在来说最好用的框架了,但是也不能不承认它还是有一些小坑需要填了. 1.坑爹的字段缓存机制 thinkphp为了高效的读取数据库,更快的打开网页,加入了字段缓存这个机制,其实来说是挺好的 ...

  5. java 小坑_关于Java子父类关系的小坑

    原标题:关于Java子父类关系的小坑 学过JavaSE的都知道java类在初始化的时候,如果存在直接父类,是先初始化父类,然后才初始化子类. 子类拥有父类所有的非私有化成员,非私有的成员不仅仅包括pu ...

  6. C#中的Infinity有个小坑

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 昨天家里有事,上网也不方便,就没有推送文章.今天很累,也不长篇大论了.简单介绍一下最近遇到的 ...

  7. spring + maven项目 互相依赖的小坑

    在项目的搭建的过程中,出现了某个被依赖的项目,打包都是成功的,但是依赖的它的项目在编译的时候出现了问题,综合网上的解决方案,终于找到了一个可行的方法. 摘自 https://blog.csdn.net ...

  8. EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽

    DbContextPool 是 ASP.NET Core 2.1 引入的新特性,可以节省创建 DbContext 实例的开销,但没有想到其中藏着一个小坑. 最近有一个 ASP.NET Core 项目持 ...

  9. c++ tinyxml2 解析xml小坑

    如题,项目中遇到的解析xml小坑: xml是python在windows下生成的,虽然是utf8的,但是回车是16进制显示的0D 0A,与linux下的回车不同(0A),导致使用Parse函数时解析失 ...

  10. net core 小坑杂记之配置文件读取(不定期更新)

    其实很早就想写了,原想等积累差不多了再写的,但是发现遇到一个当时记下效果会比较好,所以就不定期更新这个系列了,后面获取会整个整理一下. 此篇记载net core入门时踩的一些坑,网上教程太少了,也不规 ...

最新文章

  1. 京东11·11:撬动数据中心的支点——京东阿基米德
  2. core部署iis的 调试net_远程调试远程 IIS 计算机上的 ASP.NET Core - Visual Studio | Microsoft Docs...
  3. 计算机基础知识二进制转换,计算机基础知识数制转换
  4. 部署点评Cat监控项目(转)
  5. 【python】rvm库安装问题解决
  6. 计算机视觉入门和进阶学习
  7. 阶段3 3.SpringMVC·_05.文件上传_2 文件上传之传统方式上传代码回顾
  8. 【珍藏】 2012Android开发热门资料(110个)
  9. 嵌入式开发辅助工具_JPG图片转HEX工具
  10. Web基础配置篇(十三): ELK集群搭建
  11. android textview 字母数字键盘,android数字键盘怎样设置成默认的
  12. 移动web适配的方式
  13. debian 安装php7_Ubuntu/Debian安装PHP 7.2教程
  14. 某电商客户数据价值分析项目
  15. 球与球的碰撞检测java测试_cocos 躲避球游戏(2) --资源导入和碰撞检测
  16. PTA甲级 1043 Is It a Binary Search Tree (25分) 树的遍历
  17. 第一章网络介绍计算题及其解析[计算机网络]
  18. 文献 | 肥胖这种病,心理因素是源头?
  19. 【极坐标下牛顿—拉夫逊潮流计算(matlab版+python版)】
  20. 【C++进阶】一、继承(总)

热门文章

  1. Blue Coat 庖丁解牛 云安全势在必行
  2. “十步杀一人,千里不留行。事了拂衣去,深藏功与名。”
  3. 第一章 .NET体系结构
  4. 打造自己的视频会议系统 GGMeeting(附送源码)
  5. winword.exe应用程序错误
  6. 大数据技术之_13_Azkaban学习_Azkaban(阿兹卡班)介绍 + Azkaban 安装部署 + Azkaban 实战...
  7. vue中Axios的封装和API接口的管理
  8. 阿里网盘“该文件类型暂时不支持分享”解决方案
  9. Python语法基础实验闯关
  10. linux设置法语键盘布局,法语键盘布局图;