Android開發——diglog cancel與dismiss方法區別
阿新 • • 發佈:2017-09-15
get() 方法 null ref 變量 width align eight ora
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方法區別