场景:在一个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. strings---对象文件或二进制文件中查找可打印的字符串

    strings命令在对象文件或二进制文件中查找可打印的字符串.字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束. strings命令对识别随机对象文件很有用. 语法 strings [ - ...

  2. linux 查看tomcat 实时日志

    进入tomcat下logs文件夹下,若没有Catalina.out文件先去启动服务在回到logs文件夹输入 tail -f catalina.out ,可看到实时日志

  3. JQ each 各种标签

    类选择器: $("input[class=class1]").each(function(){ alert($(this).val()); }); ID选择器: $("i ...

  4. 【转】Flash AS3.0 中的自定义事件

    原文 http://www.cnblogs.com/acpp/archive/2010/10/19/1855670.html package { import flash.events.Event; ...

  5. SQL 自增列清零方法

    SQL Identity自增列清零方法1.使用DBCC控制台命令: dbcc checkident(表名,RESEED,0) 2.truncate table 也可将当前标识值清零 但当有外键等约束时 ...

  6. 蓝的成长记——追逐DBA(10):飞刀防身,熟络而非专长:摆弄中间件Websphere

    原创作品,出自 "深蓝的blog" 博客.欢迎转载,转载时请务必注明出处.否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong ...

  7. 在 Android 应用程序中使用 SQLite 数据库以及怎么用

    part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开 ...

  8. Linux Unix shell 编程指南学习笔记(第二部分)

    第七章  正則表達式介绍 匹配行首与行尾 匹配数据集 职匹配字母和数字 句点 "." 匹配随意单字符. ^,在行首 匹配字符串或字符序列,如查询当前文件夹下的全部文件夹: ls - ...

  9. Android引入library失败的可能原因

    eclipse环境,引入library一直失败 谷歌到的原因是 Windows下 目标工程必须和引用工程在同一磁盘盘符下 然后我将要引入的library项目移动和现在项目同一磁盘下,引入成功 至于为什 ...

  10. sparksql不支持hive中的分区名称大写

    但是在hive中查询是可以的. 后来经过一点一点测试发现,原来分区名称不能是大写,必须小写才行.