博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AlertDialog的onCreateDialog与onPrepareDialog用法
阅读量:4353 次
发布时间:2019-06-07

本文共 4002 字,大约阅读时间需要 13 分钟。

场景:在一个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,生成不一样的对话框。详见

这里不再详述。

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

中具体介绍,这里不详述。

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;        }    }

转载于:https://www.cnblogs.com/gcczhongduan/p/5134420.html

你可能感兴趣的文章
[poj3261]Milk Patterns(后缀数组)
查看>>
[luogu3369]普通平衡树(fhq-treap模板)
查看>>
题解 P2799 【国王的魔镜】
查看>>
写写代码,注意注意细节
查看>>
css Backgroud-clip (文字颜色渐变)
查看>>
安装 OpenSSL 工具
查看>>
用长微博工具发布长微博
查看>>
大庆金桥帆软报表案例
查看>>
方维分享系统,个人中心杂志社显示我的、关注的、推荐的数量
查看>>
JavaScript BOM加载事件
查看>>
Java复习总结——详细理解Java反射机制
查看>>
Navicat for MySQL10.1.7注册码
查看>>
Proxy模式
查看>>
读书多些会怎样
查看>>
浏览器好用的技术
查看>>
HDU 2188------巴什博弈
查看>>
tp5任务队列使用supervisor常驻进程
查看>>
Xmind?
查看>>
spring+quartz 实现定时任务三
查看>>
day2-三级菜单
查看>>