`
king_tt
  • 浏览: 2121647 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

如果消除重复代码?从AlertDialog说起

 
阅读更多

最近项目里面用到弹出框,然后我看到很多重复代码,所以我就自己重构了下,废话不多说了,直接讲解吧

1.首先我们先新建一个回调接口

package com.example.demoactivity;

/**
 * 这个是点击AlertDialog的回调接口
 * @author xiaanming
 *
 */
public interface DialogListener {
	/**
	 * 确认按钮的回调方法
	 * @param id 一个Activity可能有多个AlertDialog,这个id是来区别我们点击的是哪个AlertDialog
	 */
	public void positive(int id);
	
	/**
	 * 取消按钮的回调方法,我们一般点取消都是关闭AlertDialog,这里我预留一个回调方法在这里
	 * @param id
	 */
	public void negative(int id);
}
对java回调不熟悉的朋友可以看我的另一篇博客一个经典例子让你彻彻底底理解java回调机制,代码我注释的还比较详细吧

2.新建一个Dialog工具类

package com.example.demoactivity;

import com.example.demoactivity.DialogListener;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;

public class DialogUtils {
	private Context context;
	
	public DialogUtils(Context context){
		this.context = context;
	}
	
	/**
	 * 
	 * @param dialogId  这个是我们区别不同的ConfirmDialog的Id
	 * @param title     ConfirmDialog的标题
	 * @param message   ConfirmDialog的提示消息
	 * @param positive  ConfirmDialog确认按钮上面的文字
	 * @param negative  ConfirmDialog取消按钮上面的文字
	 * @param dialogListener    ConfirmDialog 的监听器
	 * @return
	 */
	public Dialog createConfirmDialog(final int dialogId,String title, String message,
			String positive, String negative,
			final DialogListener dialogListener) {
		AlertDialog alert = null;
		AlertDialog.Builder builder = null;
		builder = new AlertDialog.Builder(context);
		builder.setTitle(title)
				.setMessage(message)
				.setCancelable(true)
				.setPositiveButton(positive,
						new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int id) {
								//点击确认按钮的回调的方法
								dialogListener.positive(dialogId);
							}
						})
				.setNegativeButton(negative,
						new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int id) {
								//点击取消按钮的回调方法
								dialogListener.negative(dialogId);
							}
						});
		alert = builder.create();
		return alert;
	}
	
	
	/**
	 * 这个是一个默认的弹出对话框
	 * @param id
	 * @param message
	 * @param dialogListener
	 * @return
	 */
	public Dialog createConfirmDialog(int id, String message,final DialogListener dialogListener){
		return createConfirmDialog(id, "提示", message, context.getString(android.R.string.ok), context.getString(android.R.string.cancel), dialogListener);
	}
	
}
创建一个Dialog的自己可提示的问题的方法,当然图标我没写进去,大家自行修改,用法也很简单

package com.example.demoactivity;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{
	private Button mDefaultButton;
	private Button mCustomButton;
	private DialogUtils dialogUtils;
	
	private static final int DEFAULT = 1;
	private static final int CUSTOM = 2;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		init();
	}
	
	private void init(){
		dialogUtils = new DialogUtils(MainActivity.this);
		
		mDefaultButton = (Button)findViewById(R.id.button1);
		mCustomButton = (Button)findViewById(R.id.button2);
		mDefaultButton.setOnClickListener(this);
		mCustomButton.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		switch(v.getId()){
		case R.id.button1:{
			dialogUtils.createConfirmDialog(DEFAULT, "确认要退出?", new DialogListener() {
				
				@Override
				public void positive(int id) {
					showToast("点击了确认按钮");
				}
				
				@Override
				public void negative(int id) {
					showToast("点击了取消按钮");
				}
			}).show();
			break;
		}
		case R.id.button2:{
			dialogUtils.createConfirmDialog(CUSTOM, "提示", "检查到该应用有新版本可升级,时候要升级?", "立即升级", "以后再说", new DialogListener() {
				
				@Override
				public void positive(int id) {
					showToast("点击了升级");
				}
				
				@Override
				public void negative(int id) {
					showToast("点击了以后再说");
					
				}
			}).show();
			break;
		}
		}
		
	}

	
	private void showToast(String msg){
		Toast.makeText(getApplication(), msg, Toast.LENGTH_SHORT).show();
	}

}
上面的代码也比较简单,两个按钮,点击两个按钮做相应的操作,这样子我们创建Dialog的时候是不是直接调用一个函数就搞定了呢,哈哈,马上要下班了,今天晚上自己煲汤喝,我想好了,煲玉米排骨汤喝吧,我最喜欢喝这个汤,没有女朋友的程序员就是苦逼啊,每天晚上都是孤零零的一个人,大家一起努力吧,老婆,房子,车子都在等着你们,哈哈


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics