AlertDialog使用很方便,但是有一个问题就是:dismiss方法和cancel方法到底有什么不同?

AlertDialog继承与Dialog,现在各位看看结构图:

然后在Dialog类中找到了dismiss和cancel方法的实现。重要看dismiss的源码:

  1. public void cancel() {
  2. if (mCancelMessage != null) {
  3.  
  4. // Obtain a new message so this dialog can be re-used
  5. Message.obtain(mCancelMessage).sendToTarget();
  6. }
  7. dismiss();
  8. }

看明白了吧! 在cancel方法中调用了dismiss方法。 但是现在还有一个问题就是:mCancelMessage是什么?

private Message mCancelMessage; // 这是源码中的声明

然后再来看源码:

  1. public void setOnCancelListener(final OnCancelListener listener) {
  2. if (listener != null) {
  3. mCancelMessage = mListenersHandler.obtainMessage(CANCEL, listener);
  4. } else {
  5. mCancelMessage = null;
  6. }
  7. }
  8.  
  9. public void setCancelMessage(final Message msg) {
  10. mCancelMessage = msg;
  11. }

现在问题清楚了,就是如果你在创建AlertDialog的时候调用了setOnCancelListener 这个mCancelMessage变量有作用,否则dismiss和cancel等同。

AlertDialog dismiss 和 cancel方法的区别的更多相关文章

  1. Android 开发 对话框Dialog dismiss和hide方法的区别

    http://ningtukun.blog.163.com/blog/static/186541445201310151539697/ dismiss和hide方法都可以隐藏对话框,在需要的时候也可以 ...

  2. Android对话框之dismiss和cancel和hide区别

    在我们看来两者效果都是一样的,其实看下源码就知道cancel肯定会去调dismiss的,如果调用的cancel的话就可以监听DialogInterface.OnCancelListener. /** ...

  3. -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

     本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁  sleep()和wait()方法的区别 为什么wait( ...

  4. ScheduledExecutorService中scheduleAtFixedRate方法与scheduleWithFixedDelay方法的区别

    ScheduledExecutorService中scheduleAtFixedRate方法与scheduleWithFixedDelay方法的区别 ScheduledThreadPoolExecut ...

  5. ThinkPHP的D方法和M方法的区别

    M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...

  6. 正则表达式中的exec和match方法的区别

    正则表达式中的exec和match方法的区别 字符串的正则方法有:match().replace().search().split() 正则对象的方法有:exec().test() 1.match m ...

  7. Hibernate框架之get和load方法的区别

    我们在学习Hibernate框架时,经常会进行修改,删除操作,对于这些操作,我们都应该先加载对象,然后在执行或删除的操作,那么这里Hibernate提供了两种方法按照主键加载对象,也就是我要说的get ...

  8. [BS-27] 创建NSURL的几个方法的区别

    创建NSURL的几个方法的区别     URL的基本格式 = 协议://主机地址/路径 URL和Path的区别 * URL:统一资源定位符,格式 “协议+主机名称+路径”   例如:[NSURL UR ...

  9. Java线程中yield与join方法的区别

    长期以来,多线程问题颇为受到面试官的青睐.虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用.之前,我讨论了一个w ...

随机推荐

  1. 我和Cpp的第一次正式约会

    今天是我和Cpp的第一次正式的约会,大一的时候学校开了Cpp课,可是那时候玩性未收,没有好好学习,而如今我主动约Cpp,是真的想跟他进一步走下去^_^,正在学习<C++ Primer>,每 ...

  2. SharePoint 2013 更新多个用户字段(Person or Group)

    有时我们需要更新一个用户到Person or Group类型的字段, 当然这个属性允许设置多个用户, 要如何才能添加新的用户到该字段,同时还不影响原始存在的值. 这里我们需要了解 SPFieldUse ...

  3. 关于org.openqa.selenium.ElementNotVisibleException

    最近在使用Selenium,编写最简单的百度search脚本,结果使用name来定位元素抛出了如下exception: 在定位百度的输入框,使用By.name()定位失败,但是使用By.id()和By ...

  4. 关于新手与SEO误区的那些事儿

    常见的SEO误区,部落觉得对于新手来说,最容易出现问题的就是关健词堆砌了.记得部落自己最开始做网站的时候,基本每一篇文章都会布局很密的关健词.当然,对于新手网站SEO来说,远远不止这一点,或许最重要的 ...

  5. Ombrophobic Bovines

    poj2391:http://poj.org/problem?id=2391 题意:一个人有n个农场,每个农场都一个避雨的地方,每个农场有一些牛,每个避雨的地方能容纳牛的数量是有限的.农场之间有一些道 ...

  6. VC版本的MakeObjectInstance把WNDPROC映射到类的成员函数

    这段时间用VC封装Windows类库,没有MakeObjectInstance处理窗口消息确实不爽,又不想使用MFC的消息映射,这玩意的效率和美观只能呵呵. 至于MakeObjectInstance是 ...

  7. Lua I/0输入输出

    I/O库为文件操作提供了两种不同的模型,简单模型和完整模型.简单模型假设一个当前输入文件和一个当前输出文件,他的I/O操作均作用于这些文件.完整模型则使用显式的文件句柄,并将所有的操作定义为文件句柄上 ...

  8. Unity 3D物体的点击事件响应以及NGUI坐标和世界坐标的互相转换

    Unity 版本:4.5 NGUI版本:3.6.5 参考链接:http://game.ceeger.com/Script/Camera/Camera.ScreenPointToRay.html,Uni ...

  9. Linux下高并发网络编程

      Linux下高并发网络编程 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时, 最高的并发数量都要受到系统对用户单一进程同时可打 ...

  10. Hadoop core-site.xml 配置项列表

    core-default.xml与core-site.xml的功能是一样的,如果在core-site.xml里没有配置的属性,则会自动会获取core-default.xml里的相同属性的值 官方文档: ...