天天看點

AlertDialog dismiss 和 cancel方法的差別

 Dialog類中找到了dismiss和cancel方法的實作。 看dismiss的源碼:

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; // 這是源碼中的聲明

public void setOnCancelListener(final OnCancelListener listener) {
        if (listener != null) {
            mCancelMessage = mListenersHandler.obtainMessage(CANCEL, listener);
        } else {
            mCancelMessage = null;
        }
    }

public void setCancelMessage(final Message msg) {
        mCancelMessage = msg;
    }      

如果  建立AlertDialog的時候設定了setOnCancelListener 這個mCancelMessage變量有作用,那麼cancel 比dismiss要多做一些任務,否則dismiss和cancel等同