Dialog 的cancel 和dismiss 方法

就是当使用cancel()的时候,则会同时调用你注册的DialogInterface.OnCancelListener()这个方法。以下是相关API的解释

 

public void cancel ()

Since: API Level 1

Cancel the dialog. This is essentially the same as calling dismiss(), but it will also call your DialogInterface.OnCancelListener (if registered).


public void dismiss ()

 

Since: API Level 1

 

Dismiss this dialog, removing it from the screen. This method can be

 

invoked safely from any thread. Note that you should not override this

 

method to do cleanup when the dialog is dismissed, instead implement

 

that in onStop().



然后在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;
        }
    }
public void setCancelMessage(final Message msg) {
        mCancelMessage = msg;
    }

现在问题清楚了,就是如果你在创建AlertDialog的时候调用了setOnCancelListener 这个mCancelMessage变量有作用,否则dismiss和cancel等同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值