1. 程式人生 > >Android開發——diglog cancel與dismiss方法區別

Android開發——diglog cancel與dismiss方法區別

get() 方法 null ref 變量 width align eight ora

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

Android開發——diglog cancel與dismiss方法區別