场景:在一个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. 【Codeforces Round #460 (Div. 2) B】 Perfect Number

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 直接暴力求出第k个perfect数字就好. 纯模拟. [代码] #include <bits/stdc++.h> #de ...

  2. jquery源码09 (6058 , 6620) css() : 样式的操作

    var curCSS, iframe, // swappable if display is none or starts with table except "table", & ...

  3. amaze ui和bootstrap有哪些差别?

    amaze ui和bootstrap有哪些差别? 问题 我最近在学amaze ui,感觉如果单从功能性来看和bootstrap最大差别也就是扁平化,不过妹子ui号称对国产本土化支持更好,这个具体表现在 ...

  4. es7 --- 新特性

    ES7只有2个特性: includes() 指数操作符 不使用ES7 使用indexOf()验证数组中是否存在某个元素,这时需要根据返回值是否为-1来判断: let arr = ['react', ' ...

  5. Cloudera Hue是什么?

     Hue是cdh专门的一套web管理器,它包括3个部分hue ui,hue server,hue db.hue提供所有的cdh组件的shell界面的接口.你可以在hue编写mr,查看修改hdfs的文件 ...

  6. 湖南省第八届大学生计算机程序设计竞赛(A,B,C,E,F,I,J)

    A 三家人 Description 有三户人家共拥有一座花园,每户人家的太太均需帮忙整理花园.A 太太工作了5 天,B 太太则工作了4 天,才将花园整理完毕.C 太太因为正身怀六甲无法加入她们的行列, ...

  7. BZOJ4712: 洪水(树链剖分维护Dp)

    Description 小A走到一个山脚下,准备给自己造一个小屋.这时候,小A的朋友(op,又叫管理员)打开了创造模式,然后飞到 山顶放了格水.于是小A面前出现了一个瀑布.作为平民的小A只好老实巴交地 ...

  8. 从硬件到语言,详解C++的内存对齐(memory alignment)(一)

    作者:赵宗晟 出处:https://www.cnblogs.com/zhao-zongsheng/p/9099603.html 很多写C/C++的人都知道“内存对齐”的概念以及规则,但不一定对他有很深 ...

  9. cron 简单任务调度 go

    package main import ( "github.com/robfig/cron" "log" ) func main() { i := 0 c := ...

  10. python实现获取文件列表中每一个文件keyword

    功能描写叙述: 获取某个路径下的全部文件,提取出每一个文件里出现频率最高的前300个字.保存在数据库其中. 前提.你须要配置好nltk #!/usr/bin/python #coding=utf-8 ...