zoukankan      html  css  js  c++  java
  • 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;
    				}
    			}

    如此以来,大功告成!

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

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

  • 相关阅读:
    MySQL 8.0+ 时区问题
    SSM框架整合搭建流程
    最大子段和、最大子矩阵和
    棋盘覆盖(分治)
    石子合并问题
    矩阵连乘
    selenium完成滑块验证
    背包问题(2)
    背包问题(1)
    皇后问题
  • 原文地址:https://www.cnblogs.com/fengju/p/6174492.html
Copyright © 2011-2022 走看看