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

AlertDialog dismiss 和 cancel方法的区别

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等同。

时间: 2024-10-05 06:05:28

Android开发——diglog cancel与dismiss方法区别的相关文章

Android开发实例透明效果设置方法

没什么android开发经验的朋友来说,实现透明效果是有一定难度的,我看见麦子学院android开发视频上面讲了三种方法来实现透明效果,这三种方法非常不错,嘿嘿,就抄下来分享给大家. 1.设置alpha View v = findViewById(R.id.content);/到你要设透明背景的layout 的id  v.getBackground().setAlpha(100);//0~255透明度值  2.用ARGB来控制 半透明<Button android:background="

Android开发中退出程序几种方法

参考:http://johncookie.iteye.com/blog/890734 Android程序有很多Activity,比如说主窗口A,调用了子窗口B,子窗口B又调用子窗口C,back返回子窗口B后,在B中如何关闭整个Android应用程序呢? 这里用到几种方法. 1.finish()方法 finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存,活动的资源并没有被清理:调用finish()方法会执行Activity.

Android开发之视频播放调用setVideoPath()方法

当setVideoPath()的时候,底层是这个走的: setVideoPath()-->setVideoURI()-->openVideo(): openVideo()只是setVideoURI()中的一部分,还有的没有写出来,下面看一下openVideo的具体内容: 1 private void openVideo() { 2 if (mUri == null || mSurfaceHolder == null) { 3 // not ready for playback just yet

android开发-wifi连接eclipse开发调试环境

android开发请远离数据线! 方法很简单: 第一步,首先你需要在你的手机上安装一个终端模拟器工具,这里我推荐 androidterm_1,0,48.apk,搜下各大app store都会下载到. 第二步,在手机打开这个终端工具,输入命令: su//获取root权限 setprop service.adb.tcp.port 5555//设置监听的端口,端口可以自定义,如5554,5555是默认的 stop adbd//关闭adbd start adbd//重新启动adbd 第三步,记录下你手机

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

http://ningtukun.blog.163.com/blog/static/186541445201310151539697/ dismiss和hide方法都可以隐藏对话框,在需要的时候也可以用show方法调用显示.但是,这两者是有区别的. dismiss方法会释放对话框所占的资源,而hide方法不会.activity退出前必须调用dismiss方法关闭对话框.如果对话框上有progressbar,你会发现,调用dismiss方法后,再调用show方法,出来的对话框,上面的progres

Android Studio下Android应用开发集成百度语音合成使用方法样例

转载请注明来源: http://blog.csdn.net/kjunchen/article/details/51093134 Android Studio下Android应用开发集成百度语音合成使用方法样例 首先,语音合成是指将文本信息转换成声音.意思就是将文本转化为声音,让你的应用开口说话.国内在业内比较有名的第三方语音合成平台有百度语音和科大讯飞. 本博文集成的是百度语音合成,其主要特点是: 完全永久免费 业界首创完全永久免费新形式,为开发者提供最流畅最自然的语音合成服务.完全免费,永久使

Android开发中,那些让你觉得相见恨晚的方法、类或接口

本篇文章内容提取自知乎android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常见.大多数的函数自己还是见过的,这里记录一下备忘.同时呢,也推荐一个github项目,里面记录了自己日常开发中见过的比较有用的东西开发中常用的工具.链接 Throwable类中的getStackTrace()方法,根据这个方法可以得到函数的逐层调用地址,其返回值为StackTraceElement[],而在StackTraceElement类中有四个方法g

Android开发中.toString()和String.valueOf()的区别

其实,很多时候效果是差不多的 但是,有的时候用.toString()会报错,而用String.valueOf()就不会报错 这说明两者是有差别的,在细微之处~ .toString()和String.valueOf()的区别在哪呢? jdk的文档中对.toString()有说明: String.valueOf(Object   o)  if the argument is null, then a string equal to "null ";  otherwise,  the val

在Android开发中,定时器一般有以下3种实现方法

在Android开发中,定时器一般有以下3种实现方法: 原文地址http://www.360doc.com/content/12/0619/13/87000_219180978.shtml 一.采用Handler与线程的sleep(long)方法二.采用Handler的postDelayed(Runnable, long)方法三.采用Handler与timer及TimerTask结合的方法 下面逐一介绍: 一.采用Handle与线程的sleep(long)方法 Handler主要用来处理接受到的