標籤:clear border sans otto dig 方便 class java代碼 can
AlertDialog dismiss 和 cancel方法的區別
AlertDialog使用很方便,但是有一個問題就是:dismiss方法和cancel方法到底有什麼不同?
今天有時間,看了看源碼(其實源碼並不是全都那麼深奧的!~~)。
AlertDialog繼承與Dialog,現在各位看看結構圖:
然後在Dialog類中找到了dismiss和cancel方法的實現。重要看dismiss的源碼:
Java代碼
- public void cancel() {
- if (mCancelMessage != null) {
-
- // Obtain a new message so this dialog can be re-used
- Message.obtain(mCancelMessage).sendToTarget();
- }
- dismiss();
- }
看明白了吧! 在cancel方法中調用了dismiss方法。 但是現在還有一個問題就是:mCancelMessage是什嗎?
private Message mCancelMessage; // 這是源碼中的聲明
然後再來看源碼:
Java代碼
- public void setOnCancelListener(final OnCancelListener listener) {
- if (listener != null) {
- mCancelMessage = mListenersHandler.obtainMessage(CANCEL, listener);
- } else {
- mCancelMessage = null;
- }
- }
-
- ublic void setCancelMessage(final Message msg) {
- mCancelMessage = msg;
- }
現在問題清楚了,就是如果你在建立AlertDialog的時候調用了setOnCancelListener 這個mCancelMessage變數有作用,否則dismiss和cancel等同。
Android開發——diglog cancel與dismiss方法區別