且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

AlertDialog dismiss 和 cancel方法的区别

更新时间:2022-08-14 22:14:18

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