`

AlertDialog dismiss 和 cancel方法的区别,

 
阅读更多

转子: http://luren85.iteye.com/blog/975131

 

AlertDialog使用很方便,但是有一个问题就是:dismiss方法和cancel方法到底有什么不同?

 

       今天有时间,看了看源码(其实源码并不是全都那么深奥的!~~)。

 

       AlertDialog继承与Dialog,现在各位看看结构图:

      然后在Dialog类中找到了dismiss和cancel方法的实现。重要看dismiss的源码:

Java代码  收藏代码
  1. public void cancel() {  
  2.        if (mCancelMessage != null) {  
  3.              
  4.            // Obtain a new message so this dialog can be re-used  
  5.            Message.obtain(mCancelMessage).sendToTarget();  
  6.        }  
  7.        dismiss();  
  8.    }  

    看明白了吧! 在cancel方法中调用了dismiss方法。 但是现在还有一个问题就是:mCancelMessage是什么?

    private Message mCancelMessage; // 这是源码中的声明

    然后再来看源码:

Java代码  收藏代码
  1. public void setOnCancelListener(final OnCancelListener listener) {  
  2.        if (listener != null) {  
  3.            mCancelMessage = mListenersHandler.obtainMessage(CANCEL, listener);  
  4.        } else {  
  5.            mCancelMessage = null;  
  6.        }  
  7.    }  
  8.   
  9. ublic void setCancelMessage(final Message msg) {  
  10.        mCancelMessage = msg;  
  11.    }  

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

分享到:
评论

相关推荐

    Android应用源码之alertDialog1.zip

    `show()`方法使对话框可见,`dismiss()`方法则关闭对话框。 9. **自定义对话框样式** 如果默认样式不符合需求,开发者可以通过创建XML资源文件定义自定义主题,然后应用到`AlertDialog`上,实现高度定制的对话框...

    自定义AlertDialog对话框用于加载等耗时任务提示

    然后,使用AlertDialog.Builder构建对话框,设置视图、标题(可选)、消息(可选)和按钮监听器。示例代码如下: ```java public void showProgressDialog(Context context) { LayoutInflater inflater = ...

    android使用MaterialDialog和AlertDialog弹框Timer倒计时的用法

    本教程将详细讲解如何在Android应用中使用`MaterialDialog`和`AlertDialog`实现倒计时功能,帮助开发者们提升用户体验。 首先,我们先了解`MaterialDialog`。`MaterialDialog`是Android的一款第三方库,它提供了...

    AlertDialog点击按钮不消失的实现方法

    通常,我们创建`AlertDialog`会使用`AlertDialog.Builder`,设置标题、内容视图、按钮等,并通过`create()`或`show()`方法来显示对话框。当我们在`Builder`上设置按钮监听器时,`AlertDialog`会在默认情况下在按钮被...

    安卓阻塞式对话框

    Button cancelButton = dialogView.findViewById(R.id.cancel_button); confirmButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 处理确认操作 dismiss...

    Android 普通对话框源码.zip

    对话框有自己的生命周期,与Activity类似,包括show(), dismiss(), 和cancel()方法。show()方法将对话框显示在屏幕上,dismiss()用于关闭对话框,而cancel()则会触发取消事件,通常与对话框中的否定按钮关联。 7. ...

    Android五种显示Dialog的方法实现

    pd.dismiss(); ``` 3. **Material Design 的 AlertDialog** Android 5.0(Lollipop)引入了Material Design,提供了新的AlertDialog样式。 ```java MaterialAlertDialogBuilder builder = new ...

    Android 之 对话框总结

    此外,对于源码的探究,我们可以学习Dialog类和AlertDialog类的实现细节,理解它们如何处理触摸事件、动画效果以及窗口层级管理。这对于优化对话框性能和实现更复杂的功能非常有帮助。 最后,工具类的使用可以使...

    Android 自定义AlertDialog对话框样式

    2. 创建自定义对话框类:继承`AlertDialog.Builder`,并在`onCreate()`方法中加载布局,设置视图组件和事件监听器。 3. 在主活动中使用自定义对话框:实例化自定义对话框类并调用`show()`方法。 通过以上步骤,你...

    DialogDemo

    `DialogFragment`有其自身的生命周期,包括`onCreateDialog()`、`onStart()`和`onDismiss()`等方法,开发者需要根据生命周期来管理Dialog的状态。 8. **Dialog的显示和关闭** 使用`dialog.show()`显示Dialog,`...

    Android 自定义弹出框

    `Dialog`提供了一个基本的窗口,而`AlertDialog`则提供了更多的预设样式,包括标题、消息和按钮。要创建自定义弹出框,我们通常需要继承`Dialog`或`AlertDialog.Builder`,然后覆盖或添加所需的组件和行为。 以下是...

    android等待对话框(可定时自动关闭)

    `dismiss()`方法同时用于手动关闭对话框,防止计时器和手动操作冲突。 接下来,我们可以在需要使用等待对话框的地方调用这个类。例如,在执行耗时操作如网络请求时,可以这样做: ```java WaitDialog waitDialog =...

    Android应用源码所有Dialog对话框.zip

    而cancel()方法不仅会关闭对话框,还会触发onCancel()回调,通常用于处理用户点击取消按钮或其他导致取消的操作。 8. **Dialog Theming** Android允许开发者自定义Dialog的主题,通过设置主题样式(style)可以...

    自定义对话框LoadingDialog和Toast

    在Android开发中,自定义对话框(Dialog)和Toast是两个常见的用户界面组件,用于向用户提供临时信息或在执行操作时显示加载状态。本篇将详细介绍如何创建具有Gif动画功能的自定义LoadingDialog和Toast。 一、...

    所有Dialog对话框.zip

    - `dismiss()` 和 `cancel()`:用来关闭Dialog,`dismiss()`执行正常关闭,而`cancel()`通常会触发监听器中的`onCancel()`方法。 4. **Dialog的显示与隐藏**: - `show()` 方法用于显示Dialog,`hide()` 方法则...

    自定义AlterDialog,并给控件添加监听事件

    在Android开发中,有时系统默认的AlertDialog无法满足我们的所有需求,这时我们需要自定义AlterDialog来实现更加个性化的功能和界面风格。自定义AlterDialog能够帮助我们更好地控制对话框的外观和交互,使其与项目的...

    intent实现Activity之间的启动

    在传递数据时,Intent提供了putExtra()和getExtra()方法。例如,我们可以将字符串数据从源Activity传递到目标Activity: ```java // 在源Activity中 Intent intent = new Intent(SourceActivity.this, ...

    android对话框例子

    - 通常在按钮的监听器中调用`dismiss()`方法关闭Dialog。 - 也可以通过`dialog.cancel()`来取消对话框,这通常会触发Dialog的取消监听器。 8. **Dialog的生命周期** - Dialog的生命周期与它的Activity关联,当...

    Android(Dialog).zip_android_android Dialog

    - 要关闭Dialog,可以调用`dismiss()`方法。若需监听Dialog的关闭事件,可以重写`onDismiss(DialogInterface)`方法。同时,可以设置`setCancelable(boolean)`来控制用户是否可以通过点击背景或按返回键取消Dialog。...

    Andoid 自定义对话框

    在Android开发中,为了提供更好的用户体验,我们常常需要对系统默认的组件进行自定义,对话框(AlertDialog)也不例外。系统自带的AlertDialog虽然功能齐全,但样式可能无法满足所有设计需求,这时就需要通过自定义...

Global site tag (gtag.js) - Google Analytics