最近项目里面用到弹出框,然后我看到很多重复代码,所以我就自己重构了下,废话不多说了,直接讲解吧
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的时候是不是直接调用一个函数就搞定了呢,哈哈,马上要下班了,今天晚上自己煲汤喝,我想好了,煲玉米排骨汤喝吧,我最喜欢喝这个汤,没有女朋友的程序员就是苦逼啊,每天晚上都是孤零零的一个人,大家一起努力吧,老婆,房子,车子都在等着你们,哈哈