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

须知少年凌云志,曾许人间第一流。这篇文章主要讲述Android开发——diglog cancel与dismiss方法区别相关的知识,希望能为你提供帮助。
AlertDialog dismiss 和 cancel方法的区别
              AlertDialog使用很方便,但是有一个问题就是:dismiss方法和cancel方法到底有什么不同?
 
            今天有时间,看了看源码(其实源码并不是全都那么深奥的!~~)。
 
            AlertDialog继承与Dialog,现在各位看看结构图:

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

文章图片

          然后在Dialog类中找到了dismiss和cancel方法的实现。重要看dismiss的源码:
java代码   
Android开发——diglog 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; // 这是源码中的声明
      然后再来看源码:
Java代码   
Android开发——diglog cancel与dismiss方法区别

文章图片
  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. ublic  void  setCancelMessage(final  Message  msg)  {   
  10.               mCancelMessage  =  msg;    
  11.       }   
【Android开发——diglog cancel与dismiss方法区别】    现在问题清楚了,就是如果你在创建AlertDialog的时候调用了setOnCancelListener 这个mCancelMessage变量有作用,否则dismiss和cancel等同。

    推荐阅读