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

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

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

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

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

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

然后再来看源码:

Java代码  
  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. ublic void setCancelMessage(final Message msg) {
  9. mCancelMessage = msg;
  10. }

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

Public void cancel ()

Since: API Level 1

Cancel the dialog. This is essentially the same as calling dismiss(), but it will also call yourDialogInterface.OnCancelListener (if registered).

取消对话框,基本上和调用dismiss效果一样。但是cancel同事也会调用DialogInterface.OnCancelListener注册的事件,如果注册了。

public void dismiss ()

Since: API Level 1

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 inonStop().

参考:http://blog.csdn.net/cpcpc/article/details/6774823

转载于:https://www.cnblogs.com/spring87/p/4272541.html

Android_Dialog cancle 和dismiss 区别相关推荐

  1. dialog dismiss和cancle的区别

    1 dismiss和cancle都会有回调 可以通过setDismissListenner来获取. 区别在于 cancle会先发起回调 然后 再执行dismiss. 所以就是cancel的listen ...

  2. has leaked window com.android.internal.policy.impl.PhoneWindow解决(Dialog.cancel、dismiss、hide区别)

    项目中有个Activity中用到了ProgressDialog,而在跳转到下个Activity时就会报这个错: has leaked window com.android.internal.polic ...

  3. Android开发——diglog cancel与dismiss方法区别

    AlertDialog dismiss 和 cancel方法的区别 AlertDialog使用很方便,但是有一个问题就是:dismiss方法和cancel方法到底有什么不同? 今天有时间,看了看源码( ...

  4. dismiss android,[转]Android对话框中dismiss和cancel、hide的区别

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

  5. dismiss和remove_Dialog的dismiss和cancel 区别 (转)

    Dialog的dismiss和cancel AlertDialog使用很方便,但是有一个问题就是:dismiss方法和cancel方法到底有什么不同? 今天有时间,看了看源码(其实源码并不是全都那么深 ...

  6. android中dialog的dismiss()和cancel()的区别

    dismiss() 主要作用是让dialog从屏幕上消失   源码如下: /*** Dismiss this dialog, removing it from the screen. This met ...

  7. dismiss和ignore区别_Ignore什么意思及同义词

    一.意思 ignore 英 [ɪgˈnɔ:(r)]   美 [ɪɡˈnɔr, -ˈnor] vt.忽视,不顾;[法律]驳(诉讼) 1.I made a suggestion but they chos ...

  8. 四种DCOM错误的区别,0x80080005 0x800706be 0x80010105 0x

    四种DCOM错误的区别 Differences between the following DCOM error 0x80080005 0x800706be 0x80010105 0x800706ba ...

  9. Storyboard里面的几种Segue区别及视图的切换:push,modal,popover,replace和custom

    一.视图切换类型介绍 在storyboard中,segue有几种不同的类型,在iphone和ipad的开发中,segue的类型是不同的. 在iphone中,segue有:push,modal,和cus ...

最新文章

  1. C++ 的语言杂谈(一)--C++不是新手友好的
  2. XML和HTML有什么区别?两者之间有什么关联?
  3. 快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC、EntityFrameWork、T4模板技术。...
  4. Spring Boot之基于Redis实现MyBatis查询缓存解决方案
  5. 会计行业被计算机取代马云,会计人:为什么我神烦“人工智能取代说”?
  6. (139)FPGA面试题-FPGA设计中的速度和面积互换原则
  7. java i18n_Java i18n – Java的国际化
  8. [C/C++11语法]_[0基础]_[lamba 表达式介绍]
  9. php单例模式的实现方式,PHP之单例模式的实现
  10. dubbo学习视频教程
  11. 科来网络分析系统2010v7.3.1.2436 激活注册汉化方法
  12. Exchange2013DAG环境搭建
  13. AutoVue使用教程:如何在64位Linux上安装AutoVue
  14. 写着代码的插画师—王凌 |WLOP|
  15. 传统数据库辉煌不再,云数据库迎来黄金时代
  16. 安心收纳各种重要物品,不在家也能时刻守护安全,VOC智能保管箱G300上手测评
  17. 项目01城市餐饮店铺选址分析
  18. 【算法岗面试】某小厂V面试题
  19. 欧洲家具EN 597-1 跟EN 597-2两个阻燃标准一样吗?
  20. 转 C# GridView中DataFormatString属性的取值

热门文章

  1. 苹果新款笔记本_苹果发布新款 13 寸 MacBook Pro 笔记本
  2. CUDA sample volumeRender
  3. 短视频书单号文案素材哪里找?
  4. 选择篇(042)-下面代码的输出是什么?
  5. 怎么才能购买靠谱的云主机?
  6. 评《Code》-- 赞誉太过的一本科普著作
  7. VBA Scripting.Dictionary常用方法
  8. 抽象数据类型与计算机内部表示和实现无关,实验02 抽象数据类型的表示与实现.doc...
  9. 你怎么帮我提高英语水平
  10. Macbook键盘图标与对应快捷按键、系统快捷键