Android中级第三讲--如何复用AlertDialog

来源:互联网 发布:68淘宝小号官网 编辑:程序博客网 时间:2024/04/29 08:16
博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved !
看了很多关于AlertDialog的文章,很少提起复用的问题
一般情况下整齐一点的调用只有下面这样:

1、定义final标志

final int TIME_DIALOG = 1, REPEAT_DIALOG = 2, EVERY_DIALOG = 3,DATE_DIALOG2 = 4;

2、准备生成Dialog方法

/** * 创建对话框 */@Overridepublic Dialog onCreateDialog(int id) {Dialog dialog = null;switch (id) {/** * 开始 */case TIME_DIALOG://处理逻辑break;default:break;}return dialog;}

3、在方法中调用

/** * 时间按钮点击事件 */btntime.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {showDialog(TIME_DIALOG);}});/** * 重复按钮点击事件 */btnrepeat.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {showDialog(REPEAT_DIALOG);}});

上面是大家正常使用Dialog的过程。

但实际上,这样仍然需要创建多个dialog,不能实现dialog的复用在下经常长时间研究,终于想出如下办法,

简单来说,之前就是做一个操作,要new一个dialog,然后show

现在就是只new一个dialog,每次处理逻辑传给dialog一个标记,如1,2,3,然后在dialog调用的doBatch(int id) ,根据id来处理不同的业务。

将上面的逻辑实现过程,简化为:
1、调用创建方法

在xml文件中给button定义  android:onClick="myClickHandler"  方法

具体参见:巧妙的OnClick监听使用,不用再写btn.setOnclickListener

case R.id.contact_batch_del:openDialog(AppData.DIALOG1);break;case R.id.contact_batch_star:openDialog(AppData.DIALOG2);break;

2、创建dialog

public void openDialog(final int id) {new AlertDialog.Builder(context).setPositiveButton(R.string.contact_ok, newDialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, intwhichButton) {/* * User *  * clicked OK so do some stuff */doBatch(id);}}).setNegativeButton(R.string.contact_cancel, newDialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, intwhichButton) {/* * User *  * clicked Cancel so do some stuff */dialog.dismiss();}}).create().show();}


3、执行内部方法

public void doBatch(int id) {switch (id) {case AppData.DIALOG1:int count = oaController.delContactList(chosenList);Tools.showToast(context, "有" + count + "个联系人被处理!");break;case AppData.DIALOG2:count = oaController.starContactList(chosenList);Tools.showToast(context, "有" + count + "个联系人被处理!");break;default:break;}}

如此以来,大功告成!

本人特别喜欢整齐而又简单的代码,复用性强。

本博出自博主手书,转载请说明出处,以规避法律责任!谢谢合作!