Dialog中cancel和dismiss的区别:
AlertDialog继承了Dialog,下面就以AlertDialog为例:
在cancle()方法中调用了dismiss()方法:
- public void cancel() {
- if (mCancelMessage != null) {
- // Obtain a new message so this dialog can be re-used
- Message.obtain(mCancelMessage).sendToTarget();
- }
- 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变量有作用,否则dismiss和cancel等同。
当使用cancel()的时候,则会同时调用你注册的DialogInterface.OnCancelListener()这个方法。