场景:在一个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)生成对话框非常easy理解。依据不一样的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用法的更多相关文章

  1. AlertDialog.Builder对话框类的用法

    1.在测试时,如何实现一个提示 可以使用 Toast.makeText(this, "这是一个提示", Toast.LENGTH_SHORT).show(); //从资源文件str ...

  2. 【转】Android动态改变对 onCreateDialog话框值 -- 不错不错!!!

    原文网址:http://www.111cn.net/sj/android/46484.htm 使用方法是这样的,Activity.showDialog()激发Activity.onCreateDial ...

  3. Android 对话框用法

    来自:http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html Activities提供了一种方便管理的创建.保存.回复的对话框机制,例 ...

  4. 【起航计划 020】2015 起航计划 Android APIDemo的魔鬼步伐 19 App->Dialog Dialog样式

    这个例子的主Activity定义在AlertDialogSamples.java 主要用来介绍类AlertDialog的用法,AlertDialog提供的功能是多样的: 显示消息给用户,并可提供一到三 ...

  5. Android 对话框(Dialog)大全 建立你自己的对话框

    Android 对话框(Dialog)大全 建立你自己的对话框 原文地址: http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html A ...

  6. Dialog类介绍

    Dialog类实现为一个简单的漂浮窗口,完全在Activity中创建.使用基本的Dialog类,你可以创建一个新的实例并设定标题和布局,如下所示: Dialog d = new Dialog(MyAc ...

  7. 转 Android 对话框(Dialog)大全 建立你自己的对话框

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...

  8. Android 对话框(Dialog)大全

    转自: http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html Activities提供了一种方便管理的创建.保存.回复的对话框机制, ...

  9. Android 对话框(Dialog)

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...

随机推荐

  1. Linux学习总结(1)——Linux命令大全完整版

    Linux命令大全完整版 目    录I 1. linux系统管理命令1 adduser1 chfn(change finger information)1 chsh(change shell)1 d ...

  2. CSUOJ 1532 JuQueen

    Problem H JuQueen JuQueen is the super computer with the best performance allover Germany. It is on ...

  3. xadmin列表页添加自定义工具栏toolbar

    通过xadmin的Plugin实现,adminx.py中 class Link2AdminPlugin(BaseAdminPlugin): link_2_admin = False def init_ ...

  4. CentOS-6.4-minimal版中安装JDK_Maven_Subversion以及改动rpm包安装路径

    完整版见https://jadyer.github.io/2013/09/07/centos-config-develop/ /** * @see -------------------------- ...

  5. [Python] Python Libs

    The Python Standard Library has a lot of modules! To help you get familiar with what's available, he ...

  6. C# Excel文件导入操作

    Excel文件导出的操作我们经经常使用到,可是讲一个Excel文档导入并显示到界面还是第一次用到. 以下简介下在C#下怎样进行Excel文件的导入操作. 首先加入两个引用 using System.I ...

  7. 关于集合类set

    list中允许有重复的元素,而set中不允许有重复的元素. package cn.hncu.Test; import java.util.HashMap; import java.util.Map; ...

  8. POJ 3042 区间DP(费用提前计算相关的DP)

    题意: 思路: f[i][j][1]表示从i到j的区间全都吃完了 现在在j点 变质期最小是多少 f[i][j][0]表示从i到j的区间全都吃完了 现在在i点 变质期最小是多少 f[i][j][0]=m ...

  9. Codefroces B. New Skateboard

    B. New Skateboard time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  10. IDLE的自动补全功能

    IDLE的自动补全功能位于:Edit→Show Completions,但每次需要补全的时候都需要点击一次,虽然IDLE提供了一个快捷键(Ctrl + Space),但实测无效.具体操作如下图