Android中级第三讲如何复用AlertDialog

博客出自: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方法

/**
	 * 创建对话框
	 */
	@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;
				}
			}

如此以来,大功告成!

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

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

原文地址:https://www.cnblogs.com/fengju/p/6174492.html