转子: http://luren85.iteye.com/blog/975131
AlertDialog使用很方便,但是有一个问题就是:dismiss方法和cancel方法到底有什么不同?
今天有时间,看了看源码(其实源码并不是全都那么深奥的!~~)。
AlertDialog继承与Dialog,现在各位看看结构图:
然后在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;
- }
- }
- ublic void setCancelMessage(final Message msg) {
- mCancelMessage = msg;
- }
现在问题清楚了,就是如果你在创建AlertDialog的时候调用了setOnCancelListener 这个mCancelMessage变量有作用,否则dismiss和cancel等同。 OK! 白白~~
相关推荐
`show()`方法使对话框可见,`dismiss()`方法则关闭对话框。 9. **自定义对话框样式** 如果默认样式不符合需求,开发者可以通过创建XML资源文件定义自定义主题,然后应用到`AlertDialog`上,实现高度定制的对话框...
然后,使用AlertDialog.Builder构建对话框,设置视图、标题(可选)、消息(可选)和按钮监听器。示例代码如下: ```java public void showProgressDialog(Context context) { LayoutInflater inflater = ...
本教程将详细讲解如何在Android应用中使用`MaterialDialog`和`AlertDialog`实现倒计时功能,帮助开发者们提升用户体验。 首先,我们先了解`MaterialDialog`。`MaterialDialog`是Android的一款第三方库,它提供了...
通常,我们创建`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...
对话框有自己的生命周期,与Activity类似,包括show(), dismiss(), 和cancel()方法。show()方法将对话框显示在屏幕上,dismiss()用于关闭对话框,而cancel()则会触发取消事件,通常与对话框中的否定按钮关联。 7. ...
pd.dismiss(); ``` 3. **Material Design 的 AlertDialog** Android 5.0(Lollipop)引入了Material Design,提供了新的AlertDialog样式。 ```java MaterialAlertDialogBuilder builder = new ...
此外,对于源码的探究,我们可以学习Dialog类和AlertDialog类的实现细节,理解它们如何处理触摸事件、动画效果以及窗口层级管理。这对于优化对话框性能和实现更复杂的功能非常有帮助。 最后,工具类的使用可以使...
2. 创建自定义对话框类:继承`AlertDialog.Builder`,并在`onCreate()`方法中加载布局,设置视图组件和事件监听器。 3. 在主活动中使用自定义对话框:实例化自定义对话框类并调用`show()`方法。 通过以上步骤,你...
`DialogFragment`有其自身的生命周期,包括`onCreateDialog()`、`onStart()`和`onDismiss()`等方法,开发者需要根据生命周期来管理Dialog的状态。 8. **Dialog的显示和关闭** 使用`dialog.show()`显示Dialog,`...
`Dialog`提供了一个基本的窗口,而`AlertDialog`则提供了更多的预设样式,包括标题、消息和按钮。要创建自定义弹出框,我们通常需要继承`Dialog`或`AlertDialog.Builder`,然后覆盖或添加所需的组件和行为。 以下是...
`dismiss()`方法同时用于手动关闭对话框,防止计时器和手动操作冲突。 接下来,我们可以在需要使用等待对话框的地方调用这个类。例如,在执行耗时操作如网络请求时,可以这样做: ```java WaitDialog waitDialog =...
而cancel()方法不仅会关闭对话框,还会触发onCancel()回调,通常用于处理用户点击取消按钮或其他导致取消的操作。 8. **Dialog Theming** Android允许开发者自定义Dialog的主题,通过设置主题样式(style)可以...
在Android开发中,自定义对话框(Dialog)和Toast是两个常见的用户界面组件,用于向用户提供临时信息或在执行操作时显示加载状态。本篇将详细介绍如何创建具有Gif动画功能的自定义LoadingDialog和Toast。 一、...
- `dismiss()` 和 `cancel()`:用来关闭Dialog,`dismiss()`执行正常关闭,而`cancel()`通常会触发监听器中的`onCancel()`方法。 4. **Dialog的显示与隐藏**: - `show()` 方法用于显示Dialog,`hide()` 方法则...
在Android开发中,有时系统默认的AlertDialog无法满足我们的所有需求,这时我们需要自定义AlterDialog来实现更加个性化的功能和界面风格。自定义AlterDialog能够帮助我们更好地控制对话框的外观和交互,使其与项目的...
在传递数据时,Intent提供了putExtra()和getExtra()方法。例如,我们可以将字符串数据从源Activity传递到目标Activity: ```java // 在源Activity中 Intent intent = new Intent(SourceActivity.this, ...
- 通常在按钮的监听器中调用`dismiss()`方法关闭Dialog。 - 也可以通过`dialog.cancel()`来取消对话框,这通常会触发Dialog的取消监听器。 8. **Dialog的生命周期** - Dialog的生命周期与它的Activity关联,当...
- 要关闭Dialog,可以调用`dismiss()`方法。若需监听Dialog的关闭事件,可以重写`onDismiss(DialogInterface)`方法。同时,可以设置`setCancelable(boolean)`来控制用户是否可以通过点击背景或按返回键取消Dialog。...
在Android开发中,为了提供更好的用户体验,我们常常需要对系统默认的组件进行自定义,对话框(AlertDialog)也不例外。系统自带的AlertDialog虽然功能齐全,但样式可能无法满足所有设计需求,这时就需要通过自定义...