天天看点

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