AlertDialog的onCreateDialog与onPrepareDialog使用方法

场景:在一个Activity中多次使用弹出对话框,并且对话框携带着动态变化的信息数据,这时如果只使用onCreateDialog(int id, Bundle bundle)回调,则会发现第一次以后的对话框携带的数据并没有更新,这是因为该回调只被使用了一次,之后的每次使用的bundle都是第一次的bundle,数据并没有更新。

所以需要配合onPrepareDialog(int id, Dialog dialog, Bundle bundle)使用。

Android的AlertDialog生成顺序,调用 showDialog(id, bundle),首先回调onCreateDialog(int id, Bundle bundle),该方法只生成一次,然后之后再点击,就会回调onPrepareDialog(int id, Dialog dialog, Bundle bundle)。

onCreateDialog(int id, Bundle bundle)生成对话框很容易理解,根据不一样的id,生成不一样的对话框,详见

http://blog.csdn.net/zpf8861/article/details/31423049

这里不再详述。

在onPrepareDialog(int id, Dialog dialog, Bundle bundle)中,id是生成哪种对话框的标识,取决于showDialog(id, bundle),bundle是随时更新的保存新数据的bundle,bundle携带数据的方法,简单数据或者对象的方法在

http://blog.csdn.net/zpf8861/article/details/31730651

中详细介绍,这里不详述。

dialog是第一次调用onCreateDialog返回的Dialog对象,下面是一段实际代码,关键实现的几个地方在取出bundle,调用setButton等方法重新实现对话框相关方法等。

  protected void onPrepareDialog(int id, Dialog dialog, Bundle bundle) {
        final Info info = (Info) bundle.getSerializable("info");

        final AlertDialog syncDialog = (AlertDialog) dialog;

        switch (id) {
            case DIALOG_INSTALL:

                syncDialog.setTitle(getString(R.string.dialog_download_dis, label, size));

                syncDialog.setButton(AlertDialog.BUTTON_POSITIVE,
                        getString(R.string.dialog_download), new OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        });
                syncDialog.setButton(AlertDialog.BUTTON_NEGATIVE,
                        getString(R.string.dialog_cancel), new OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        });
                break;

            case DIALOG_UPDATE:

                syncDialog.setTitle(getString(R.string.dialog_update_dis, label, size));

                syncDialog.setButton(AlertDialog.BUTTON_POSITIVE,
                        getString(R.string.dialog_update), new OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        });
                syncDialog.setButton(AlertDialog.BUTTON_NEUTRAL,
                        getString(R.string.dialog_uninstall), new OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                mLanguagePackUpdateManager.unInstall(info);
                                syncDialog.dismiss();
                            }
                        });
                syncDialog.setButton(AlertDialog.BUTTON_NEGATIVE,
                        getString(R.string.dialog_cancel), new OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        });
                break;

            case DIALOG_UNINSTALL:
                syncDialog.setTitle(getString(R.string.dialog_uninstall_dis, label, size));

                syncDialog.setButton(AlertDialog.BUTTON_POSITIVE,
                        getString(R.string.dialog_uninstall), new OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        });

                syncDialog.setButton(AlertDialog.BUTTON_NEGATIVE,
                        getString(R.string.dialog_cancel), new OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        });
                break;
            default:
                break;

        }

    }

AlertDialog的onCreateDialog与onPrepareDialog使用方法

时间: 2025-01-01 14:58:25

AlertDialog的onCreateDialog与onPrepareDialog使用方法的相关文章

AlertDialog的onCreateDialog与onPrepareDialog用法

场景:在一个Activity中多次使用弹出对话框.而且对话框携带着动态变化的信息数据,这时假设仅仅使用onCreateDialog(int id, Bundle bundle)回调,则会发现第一次以后的对话框携带的数据并没有更新.这是由于该回调仅仅被使用了一次,之后的每次使用的bundle都是第一次的bundle,数据并没有更新. 所以须要配合onPrepareDialog(int id, Dialog dialog, Bundle bundle)使用. Android的AlertDialog生

AlertDialog自己定义View的使用方法+怎样改变弹出框的大小

android系统定义了弹出框,支持我们自己定义布局: public AlertDialog getEditCustomDialog() { LayoutInflater inflater = getLayoutInflater(); View view = inflater.inflate(R.layout.custom_message_rename, null); AlertDialog.Builder builder = new AlertDialog.Builder(AnimationT

关于AlertDialog.getWindow().setContentView(view)不能弹出输入法

可以阅读官方文档:http://developer.android.com/reference/android/app/Dialog.html 其中有一段: Note: Activities provide a facility to manage the creation, saving and restoring of dialogs. See onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), anddis

android对话框(Dialog)的使用方法

Activities提供了一种方便管理的创建.保存.回复的对话框机制.比如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), dismissDialog(int)等方法,假设使用这些方法的话.Activity将通过getOwnerActivity()方法返回该Activity管理的对话框(dialog). Android API支持下面类型的Dialog对象: 警告对话框 AlertDialog:  一个能够有

Android基础入门教程——2.5.3 AlertDialog(对话框)详解

Android基础入门教程--2.5.3 AlertDialog(对话框)详解 标签(空格分隔): Android基础入门教程 本节引言: 本节继续给大家带来是显示提示信息的第三个控件AlertDialog(对话框),同时它也是其他 Dialog的的父类!比如ProgressDialog,TimePickerDialog等,而AlertDialog的父类是:Dialog! 另外,不像前面学习的Toast和Notification,AlertDialog并不能直接new出来,如果你打开 Alert

自定义AlertDialog的样式

一.在XML中定义好要显示的AlertDialog的布局 二.在代码中创建alertdialog 对象 AlertDialog dialog = new AlertDialog.Builder(this).create(); 调用show方法显示 dialog.show(); 三.设置 AlertDialog窗体的大小 dialog.getWindow().setGravity(Gravity.CENTER); dialog.getWindow().setLayout((int)(width/1

Android AlertDialog对话框自定义风格的另类实现

一.引子 学过Android的同学都知道,对话框的重要程度非常高,任何一款 app几乎都离不开对话框,值得庆幸的是,对话框的运用在Android中还是相对比较容易的.虽然很简单,但我在项目中还是碰到些问题,比如,如何实现自定义的对话框NegativeButton的点击效果.如何改变标题的字体大小和颜色等. 二.分析和实现 下面来看一下下面那张效果图,微信长按通讯录时弹出的对话框. 我相信,只要是有了一定Android基础的同学都能实现此功能,就算一时忘记了,稍微google下也是能做出来的:根据

Adrnoid开发系列(二十五):使用AlertDialog创建各种类型的对话框

AlertDialog能够生成各种内容的对话框.可是每种对话框都会有这样的的结构: 类似下边这样的的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDgwMDUzMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 这仅仅是最简单的对话框. 我们来看下创建一个对话框须要的步骤: 1.使用创建AlertDialog.Builder对

AndroidUI组件之AlertDialog

package com.gc.alertdialogdemo; /** * AlertDialog: * 1.AlertDialog的功能很强大,它可以生成各种内容的对话框,实际上AlertDialog生成的 * 的对话框总可以分为4个区域:(1)图标区(2)标题区(3)内容区(3)按钮区. * 2.创建一个对话框需要经过如下几个步骤: * (1)使用创建AlertDialog.Builder对象. * (2)调用AlertDialog.Builder的setTitle()或setCustomT