Android中级第三讲--如何复用AlertDialog
博客出自:http://blog.csdn.net/liuxian13183,转载注明出处!
All Rights Reserved !
看了很多关于AlertDialog的文章,很少提起复用的问题
一般情况下整齐一点的调用只有下面这样:
看了很多关于AlertDialog的文章,很少提起复用的问题
一般情况下整齐一点的调用只有下面这样:
1、定义final标志
final int TIME_DIALOG = 1, REPEAT_DIALOG = 2, EVERY_DIALOG = 3, DATE_DIALOG2 = 4;
2、准备生成Dialog方法
/** * 创建对话框 */ @Override public Dialog onCreateDialog(int id) { Dialog dialog = null; switch (id) { /** * 开始 */ case TIME_DIALOG: //处理逻辑 break; default: break; } return dialog; }
3、在方法中调用
/** * 时间按钮点击事件 */ btntime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showDialog(TIME_DIALOG); } }); /** * 重复按钮点击事件 */ btnrepeat.setOnClickListener(new View.OnClickListener() { @Override public 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, new DialogInterface.OnClickListener() { public void onClick (DialogInterface dialog, int whichButton) { /* * User * * clicked OK so do some stuff */ doBatch(id); } }).setNegativeButton(R.string.contact_cancel, new DialogInterface.OnClickListener() { public void onClick (DialogInterface dialog, int whichButton) { /* * 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; } }
如此以来,大功告成!
本人特别喜欢整齐而又简单的代码,复用性强。
本博出自博主手书,转载请说明出处,以规避法律责任!谢谢合作!