`
king_tt
  • 浏览: 2267301 次
  • 性别: 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的时候是不是直接调用一个函数就搞定了呢,哈哈,马上要下班了,今天晚上自己煲汤喝,我想好了,煲玉米排骨汤喝吧,我最喜欢喝这个汤,没有女朋友的程序员就是苦逼啊,每天晚上都是孤零零的一个人,大家一起努力吧,老婆,房子,车子都在等着你们,哈哈


分享到:
评论

相关推荐

    AlertDialog

    在提供的"Demo"文件中,可能包含了如何使用`AlertDialog`的示例代码。这个代码可能包括了以上步骤的实现,可以作为学习和参考的模板,帮助开发者了解如何在实际项目中运用`AlertDialog`。 总之,`AlertDialog`是...

    自定义AlertDialog对话框完整代码

    本文将详细介绍如何自定义一个`AlertDialog`,并提供相关的代码示例。 首先,自定义`AlertDialog`主要涉及以下几个步骤: 1. 创建布局文件:自定义`AlertDialog`的内容通常需要一个自定义的布局文件。这个布局可以...

    alertDialog大全

    在Android开发中,`AlertDialog`是一种非常常用的组件,用于向用户展示重要的信息或者进行简单的交互。`AlertDialog`大全主要涵盖如何创建、定制以及管理对话框的各个方面。在Android应用程序中,对话框通常用来中断...

    android 使用alertdialog创建自定义对话框

    在Android开发中,`AlertDialog`是系统提供的一种用于显示警告、确认或选择信息的弹出式对话框。它可以帮助用户在不离开当前界面的情况下进行一些交互操作。在本篇文章中,我们将深入探讨如何在Android中使用`...

    警告框AlertDialog的demo

    通过下载并学习`alertdialog`这个压缩包中的示例代码,初学者可以直观地了解如何在实际项目中应用这些概念。这个demo将包含创建、显示和处理`AlertDialog`的各种情况,对于初学者来说是一份宝贵的实践资源。通过动手...

    自定义主题改变AlertDialog样式

    在上述代码中,我们定义了`AlertDialog`的背景、标题颜色、标题栏分割线、按钮样式以及按钮之间的分隔线。其中,`@drawable/dialog_background`、`@color/title_color`、`@drawable/title_divider`、`@style/...

    android 自定义AlertDialog 与Activity相互传递数据

    1、从Activity的TextView中获取字符串设置到AlertDialog的TextView和EditText中 2、将AlertDialog的EditText中的值设置到Activity的TextView中 新手在自定义AlertDialog上的疑问笔者猜测主要有两个: 1、自定义的...

    android AlertDialog使用例程

    在压缩包文件`com.iotek.dialog`中,可能包含了示例代码,这些代码可能演示了如何创建不同类型的`AlertDialog`,比如单选、多选对话框,或者是自定义布局的对话框。在实际项目中,你可以根据需求调整这些例子,例如...

    使用DialogFragment替代AlertDialog

    当我们使用AlertDialog时,如果设备发生屏幕旋转,由于Activity的重建,AlertDialog会丢失状态,可能导致用户体验下降。而DialogFragment在屏幕旋转时,由于其与Activity的生命周期关联,可以自动处理这种变化,避免...

    AlertDialog 弹出对话框

    在给定的压缩包文件中,可能包含了一个简单的示例项目,展示了如何使用`AlertDialog`创建对话框、单选框和多选框,并且在代码中添加了注释,这对于初学者来说是一个很好的学习资源。你可以通过下载并运行这个项目来...

    AlertDialog特效

    然后,在代码中创建并显示带特效的`AlertDialog`: ```java NiftyDialogBuilder dialogBuilder = NiftyDialogBuilder.getInstance(context); dialogBuilder.withEffect(NiftyEffects.EffectName.FADE_IN_SLIDE_DOWN...

    自定义alertDialog

    在这个过程中,我们没有直接编写自定义布局的代码,而是通过XML文件和`LayoutInflater`实现了自定义`AlertDialog`的创建。这使得布局的设计和代码逻辑分离,更易于维护和扩展。 在`customdialog`这个压缩包文件中,...

    alertDialog源码大全

    在Android开发中,`AlertDialog`是用户界面设计中不可或缺的一部分,它用于向用户展示重要的信息、询问决策或接收用户输入。`AlertDialog`提供了多种样式,让开发者可以根据应用场景自由选择。这个压缩包文件...

    Android中显示AlertDialog对话框

    下面是一个完整的示例代码,展示了如何创建并显示一个带有标题和两个按钮的`AlertDialog`: ```java AlertDialog.Builder builder = new AlertDialog.Builder(this); // this假设是Activity的上下文 builder....

    AlertDialog对话框 实现遮罩层

    以上代码展示了如何在Android中自定义实现`AlertDialog`的遮罩层。你可以根据项目需求进一步定制对话框的样式,如字体、颜色、按钮等。此外,还可以添加手势监听,使得用户可以通过点击遮罩层来关闭对话框,增加用户...

    AlertDialog的各种用法

    在Android开发中,`AlertDialog`是用户界面设计中不可或缺的一部分,它用于展示重要的信息或进行交互操作。`AlertDialog`提供了一种比普通的`Toast`更加强调、比`Activity`更为轻量级的对话方式。本篇文章将深入探讨...

Global site tag (gtag.js) - Google Analytics