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

AlertDialog dismiss 和 cancel方法的界别

 

      
AlertDialog使用很方便,但是有多少个标题就是:dismiss方法和cancel方法到底有啥样两样?

 

      
前日有时光,看了看源码(其实源码并不是清一色那么高深的!~~)。

 

      
AlertDialog继承与Dialog,以往各位看看结构图:

图片 1

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

Java代码  图片 2

  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代码  图片 3

  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.    }  

       现在难题了解了,就是一旦你在创设AlertDialog的时候调用了setOnCancelListener
    这些mCancelMessage变量有功力,否则dismiss和cancel等同。

相关文章