先看过效果图:
图1 输入框默认文字为"这是一个普通对话框。" 图2 当点击"显示普通对话框"后,将弹出一个对话框
图3 点击图2中的对话框的确定按钮, 输入框里输入自己的内容 图4 点击图3中的“显示普通对话框”后弹出对话框
第一步:建立res/values/string.xml
第二步:建立res/layout/common_dialog_layout.xml 用来创建输入框和“显示普通对话框”按钮
第三步: 分析:
关于src/com/mycommondialog/activity/CommonDialogActivity.java
1.首先对“显示普通对话框”按钮进行事件监听,即当点击这个按钮后显示对话框
这里showDialog(int)用来显示对话框的,是系统自带的方法,当点击button产生时间后,调用该方法,首先该方法会判断Activity是否保存了对话框对象
(1)如果未保存则调用onCreateDialog(int),然后再调用onPrepareDialog(int, Dialog)
(2)如果保存了对话框对象,则直接调用onPrepareDialog(int, Dialog),不会再去create,所以有时候当你再输入框里无论如何输入什么内容,对话框的内容都是第一次产生的。
2. Activity 未保存对话框对象,则会创建对话框,即调用onCreateDialog(int)
需要new AlertDialog.Builder(this)用来存放Dialog的内容(如图标,标题和信息),this是针对此Activity的。
setPositiveButton表示中间的那个button按钮(一般情况下button有三个按钮,此处只显示中间的那个按钮)
removeDialog(int)是用来清除Activity保存下来的Dialog对象,如果不加removeDialog将会导致无论在对话框里输入什么内容,
弹出来的对话框始终都是第一次保留下来的,这里所以要加上它
3. 关于onPrepareDialog(int, Dialog), 每次点击“显示普通对话框”按钮都会去调用此方法。
dialog.show()其实意义不大,加与不加系统都会调用show的,而且只显示一个对话框,dialog中isShowing()来判断是否该对话框正在显示了,为了验证可以将onPrepareDialog(int, Dialog)改成下面情况(只针对下列改动)
或者
结果dialog显示一个,而不会有多个对话框出现。
关于整个CommonDialogActivity代码如下(src/com/mycommondialog/activity/CommonDialogActivity.java)
最后贴出目录结构