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)生成对话框非常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用法的更多相关文章
- AlertDialog.Builder对话框类的用法
1.在测试时,如何实现一个提示 可以使用 Toast.makeText(this, "这是一个提示", Toast.LENGTH_SHORT).show(); //从资源文件str ...
- 【转】Android动态改变对 onCreateDialog话框值 -- 不错不错!!!
原文网址:http://www.111cn.net/sj/android/46484.htm 使用方法是这样的,Activity.showDialog()激发Activity.onCreateDial ...
- Android 对话框用法
来自:http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html Activities提供了一种方便管理的创建.保存.回复的对话框机制,例 ...
- 【起航计划 020】2015 起航计划 Android APIDemo的魔鬼步伐 19 App->Dialog Dialog样式
这个例子的主Activity定义在AlertDialogSamples.java 主要用来介绍类AlertDialog的用法,AlertDialog提供的功能是多样的: 显示消息给用户,并可提供一到三 ...
- Android 对话框(Dialog)大全 建立你自己的对话框
Android 对话框(Dialog)大全 建立你自己的对话框 原文地址: http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html A ...
- Dialog类介绍
Dialog类实现为一个简单的漂浮窗口,完全在Activity中创建.使用基本的Dialog类,你可以创建一个新的实例并设定标题和布局,如下所示: Dialog d = new Dialog(MyAc ...
- 转 Android 对话框(Dialog)大全 建立你自己的对话框
Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...
- Android 对话框(Dialog)大全
转自: http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html Activities提供了一种方便管理的创建.保存.回复的对话框机制, ...
- Android 对话框(Dialog)
Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...
随机推荐
- 学习推荐《Python神经网络编程》中文版PDF+英文版PDF+源代码
推荐非常适合入门神经网络编程的一本书<Python神经网络编程>,主要是三部分: 介绍神经网络的基本原理和知识:用Python写一个神经网络训练识别手写数字:对识别手写数字的程序的一些优化 ...
- JQ each 各种标签
类选择器: $("input[class=class1]").each(function(){ alert($(this).val()); }); ID选择器: $("i ...
- UVALive 7146 Defeat The Enemy
Defeat The Enemy Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Long long ...
- java设计模式--事件监听器模式和观察者模式
监听器模式:事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法 观察者模式:观察者(Observer)相当于事件监听者,被观察者(Observable)相当于事 ...
- cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁
1456. [UVa 10881,Piotr's Ants]蚂蚁 ★ 输入文件:Ants.in 输出文件:Ants.out 简单对比时间限制:1 s 内存限制:128 MB [题目描述 ...
- Linux中为XEN网桥绑定物理网卡
XEN虚拟机会默认将可以连通外网的网卡绑定到xenbr0上, 因此如果需要切换到其他物理网卡上时,需要自己配置脚本或执行命令. 1.添加脚本绑定 a.编写一个脚本,指定网卡与网桥绑定的关系 # vim ...
- Your Ruby version is 2.2.3, but your Gemfile specified 2.2.2
在文章 Ruby On Rails中REST API使用演示样例--基于云平台+云服务打造自己的在线翻译工具 中,从Bluemix上下载的初始Hello World演示样例代码在本地环境下运行调试时提 ...
- 内网使用 IPV6 之 Chrome 浏览器 扩展程序 篇
手机端的 Google Chrome 浏览器在打开 "流量节省程序"后,它会通过 Google 的服务器中转流量,这台服务器支持 IPV4 和 IPV6.想在PC端使用类似的&qu ...
- UICollectionView——整体总结
前言 这几天有时间看了下UICollectionView的东西,才发觉它真的非常强大,很有必要好好学习学习.以前虽然用过几次,但没有系统的整理总结过.这两天我为UICollectionView做一个比 ...
- 2.CURL命令
转自:https://blog.csdn.net/ligang2585116/article/details/46548617 curl是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在 ...