看了不少网上关于Android对话框的应用,下面的比较全
http://www.linuxidc.com/Linux/2011-07/39227.htm
发现一些问题,似乎都没有怎么讨论其中事件的参数说明,看api文档描述似乎也很简单。
但是应用时,经常会需要得到按钮按下去后的某些返回值,需要根据情况执行事件。
网上的代码通常是这样:
AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle(title); builder.setMessage(msg); builder.setPositiveButton("OK",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { //Click event } } ); builder.create().show();
不喜欢这样的调用方式,每次调用还得逐步创建,而且事件还得在对话框里面实现,还有返回值问题也没提到。还是习惯了C#的MessageBox.Show(msg)这种方式,还能有效判断按了哪个按钮。
所以决定定制自己的对话框类,用以解决以上的问题。
直接返回值基本很难,毕竟java的解决方式不同,那么就干脆做成直接执行不同类型的事件方法好了。
首先是定义事件侦听接口:IMessageDialogListener
public interface IMessageDialogListener { public void onDialogClickOk(int requestCode); public void onDialogClickCancel(int requestCode); public void onDialogClickClose(int requestCode); }//end interface
该接口里定义确定、取消、关闭按钮的事件。在主程序中,直接实现它,也就相当于根据返回值执行事件了。
其中,requestCode 是对话框返回的激活ID。
当一个Activity激活多个对话框时,可以传入不同的激活ID,可以任意指定。在对话框的按钮点击后,则返回此ID,那么Activity在实现此接口时,就可以根据这个ID来判断是哪个对话框的返回,以执行对应的事件方法。
接下来就是自己定制的信息提示对话框类:MessageDialog
代码如下:
package com.ricorocksoft.Control; import java.math.BigDecimal; import java.util.Date; import com.ricorocksoft.IDebug; import com.ricorocksoft.Util.ConvertUtil; import android.app.Activity; import android.app.AlertDialog.Builder; import android.content.DialogInterface; import android.view.Gravity; import android.widget.Toast; /** * * 通用普通式 Message Dialog 信息对话框显示类 * 用于显示通用的普通式样的信息对话框 * * @author Michael * */ public class MessageDialog { private String sCaptionClose="关闭"; private String sCaptionOk="确定"; private String sCaptionCancel="取消"; private int iIcoResourceId=-1; private Activity activity=null; public String getCaptionClose() { return sCaptionClose; } public void setCaptionClose(String sCaptionClose) { this.sCaptionClose = sCaptionClose; } public String getCaptionOk() { return sCaptionOk; } public void setCaptionOk(String sCaptionOk) { this.sCaptionOk = sCaptionOk; } public String getCaptionCancel() { return sCaptionCancel; } public void setCaptionCancel(String sCaptionCancel) { this.sCaptionCancel = sCaptionCancel; } public int getIcoResourceId() { return iIcoResourceId; } public void setIcoResourceId(int iIcoResourceId) { this.iIcoResourceId = iIcoResourceId; } //----------------------------------------------------------------------- public MessageDialog(Activity activity) { this.activity=activity; } //----------------------------------------------------------------------- /** * 显示带有标题的提示信息对话框 * 该对话框仅带有一个“关闭”按钮 * * @param requestCode 激活ID号 * @param title 信息提示标题 * @param message 信息提示内容 * @param listener 对话框按键点击事件侦听对象 */ public void ShowInfo(int requestCode,String title,String message,IMessageDialogListener listener){ Builder builder = CreateDialogBuilder(title,message); if(listener!=null){ builder.setPositiveButton(sCaptionClose , new DialogOnClickListener(requestCode, 0, listener) ); }else{ builder.setPositiveButton(sCaptionClose ,null); } builder.create().show(); } /** * 显示带有标题的提示信息对话框 * 该对话框仅带有一个“关闭”按钮 * 默认激活ID号为888888 * * @param title 信息提示标题 * @param messager 信息提示内容 */ public void ShowInfo(String title,String messager){ ShowInfo(888888,title,messager,null); } /** * 显示不含标题的提示信息对话框 * 该对话框仅带有一个“关闭”按钮 * 默认激活ID号为888888 * * @param messager 信息提示内容 */ public void ShowInfo(String messager){ ShowInfo(888888,"",messager,null); } /** * 显示带有标题的确认信息对话框 * 该对话框带有“确认”和“取消”两个按钮 * * @param requestCode 激活ID号 * @param title 信息提示标题 * @param message 信息提示内容 * @param listener 对话框按键点击事件侦听对象 */ public void ShowConfirm(int requestCode,String title,String message,IMessageDialogListener listener){ Builder builder = CreateDialogBuilder(title,message); if(listener!=null){ builder.setPositiveButton(sCaptionOk , new DialogOnClickListener(requestCode, 1, listener) ); builder.setNegativeButton(sCaptionCancel , new DialogOnClickListener(requestCode, 2, listener) ); }else{ builder.setPositiveButton(sCaptionOk ,null); builder.setPositiveButton(sCaptionCancel ,null); } builder.create().show(); } //---------------------------------------------------------------------------------------------------------------- /** * 创建对话框Android的AlertDialog.Builder对象 * * @param title 信息提示标题 * @param message 信息提示内容 * @return AlertDialog.Builder对象 */ public android.app.AlertDialog.Builder CreateDialogBuilder(String title,String message){ android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(activity); builder.setTitle(title); builder.setMessage(message); if(this.iIcoResourceId!=-1){ builder.setIcon(this.iIcoResourceId); } return builder; } //---------------------------------------------------------------------------------------------------------------- /** * 以Toast的方式显示提示信息 * 该Toast不含任何按钮 * * @param message 提示信息 */ public void ShowToast(String message){ Toast t =null; t = Toast.makeText(this.activity, message, Toast.LENGTH_LONG); t.setGravity(Gravity.CENTER, 0, 0); t.show(); } //---------------------------------------------------------------------------------------------------------------- private class DialogOnClickListener implements DialogInterface.OnClickListener{ private int requestCode; private int clickid=0; private IMessageDialogListener listener; public DialogOnClickListener(int requestCode,int clickid,IMessageDialogListener listener){ this.requestCode=requestCode; this.clickid=clickid; this.listener=listener; } @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub if(this.listener!=null){ switch(this.clickid){ case 0: this.listener.onDialogClickClose(this.requestCode); break; case 1: this.listener.onDialogClickOk(this.requestCode); break; case 2: this.listener.onDialogClickCancel(this.requestCode); break; } } } }//end class //---------------------------------------------------------------------------------------------------------------- }//end class
这个自定的MessageDialog,算是一个框架,主要实现了基本提示信息的对话框显示,所以里面生成的对话框,只是基本的提示信息对话框,并不包含其他选择项、列表等其他形式的对话框,但至少是个框架,其他的以后再此基础上扩展或继承就可以了。
在这个类中,还包含了一个私有的DialogOnClickListener 类,它实现了DialogInterface.OnClickListener接口。
该类的目的是维持一个传入的激活ID(requestCode),并且根据点击类型(clickid),将对话框中的按钮onClick事件,转化成点击“确定”、“取消”、“关闭”这几个按钮对应的具体事件,也就是对应执行 IMessageDialogListener 接口,并且将传入的激活ID,再返回给IMessageDialogListener。
应用时,在主程序Activity中实例化:
MessageDialog dialog=new MessageDialog(this);
主程序Activity中就可以简单直接的调用了,例如:
dialog.ShowConfirm(10, "test1", "aaaa", this); dialog.ShowConfirm(11, "test2", "bbbb", this); dialog.ShowConfirm(13, "test2", "cccc", this); dialog.ShowInfo("aaaa");
至于ShowConfirm显示确认对话框,用户选择点击按钮后,执行的对应事件,那么就可以在Activity中,实现IMessageDialogListener接口,在里面onDialogClickOk方法里,放置对应的处理逻辑。
主程序Activity可以直接实现IMessageDialogListener接口,例如:
@Override public void onDialogClickOk(int requestCode) { // TODO Auto-generated method stub switch(requestCode){ case 10: dialog.ShowToast("This the 1 Ok"+requestCode); break; case 11: dialog.ShowToast("This the 2 Ok"+requestCode); break; case 12: dialog.ShowToast("This the 3 Ok"+requestCode); break; } } @Override public void onDialogClickCancel(int requestCode) { // TODO Auto-generated method stub dialog.ShowToast("Cnacle"+requestCode); } @Override public void onDialogClickClose(int requestCode) { // TODO Auto-generated method stub dialog.ShowToast("Close"+requestCode); }
当然,也可以自己定义其他的类实现 IMessageDialogListener接口,例如 myListener1,myListener2,myListener3....不同的Listener处理不同的事务逻辑。
对话框的调用,就可以改成:
dialog.ShowConfirm(10, "test1", "aaaa", myListener1); dialog.ShowConfirm(11, "test2", "bbbb", myListener2); dialog.ShowConfirm(13, "test2", "cccc", myListener3);
相关推荐
在Android开发中,...总之,“Android项目所有Dialog对话框.rar”这个资源包含了Android开发中Dialog的各种常见形态,通过学习和实践这些示例,开发者可以更熟练地在自己的项目中运用Dialog,提高应用的交互体验。
本资源“安卓Dialog对话框相关-androiddialog总结Dialog整理.rar”提供了关于Android Dialog的总结和示例,虽然不能确保所有代码都能直接运行,但它可以作为学习和参考的宝贵资料。 首先,我们来看Dialog的基本用法...
对话框通常用于提示用户做出选择、输入信息或者显示警告。 1. **创建对话框**: 在Android中,我们可以使用`AlertDialog.Builder`来创建一个对话框。首先,我们需要实例化一个Builder对象,然后通过一系列方法来...
在Android应用开发中,消息提示和对话框是与用户交互的重要组成部分。它们为用户提供反馈,显示警告信息,或者请求用户的确认或输入。本资源“Android 消息提示与对话框源代码”涵盖了这一主题,提供了实际的源代码...
与Android平台上的AlertDialog类似,iOS中的对话框主要用于打断用户的当前操作,显示一个临时视图,这个视图通常包含一些选项、按钮或者简单的信息提示。在iOS中,这种对话框的实现主要依赖于UIAlertView和...
在Android应用开发中,对话框(Dialog)是一种重要的交互元素,用于向用户显示临时信息或者进行简单的用户交互。本文将详细讲解如何在Android中创建和使用对话框,并提供一个具体的`DialogDemo`实例来帮助理解。 一...
在Android开发中,自定义对话框(Dialog)和提示框是常见的用户界面组件,用于向用户提供信息或进行交互。它们可以增强应用的用户体验,通过定制样式和行为来适应不同的应用场景。本篇将深入探讨如何在Android中实现...
在Android开发中,Dialog对话框是一种非常常见的组件,它用于向用户展示临时信息或进行简单的交互操作。在本文中,我们将深入探讨Android源码中Dialog类的实现,并通过8个实例来理解其工作原理和使用方式。 首先,...
Sweet Alert Dialog是一款流行的开源库,它为Android提供了美观、可定制化的对话框,使得开发者能够轻松地创建出与系统风格相协调且具有吸引力的提示界面。这个项目"Android漂亮的对话框项目sweet-alert-dialog"源自...
本资源“安卓Dialog对话框相关-EasyDialog一个轻量级的灵活的提示对话框.rar”提供了一个名为EasyDialog的库,旨在简化Android中创建自定义对话框的过程。下面我们将深入探讨Dialog对话框的概念、EasyDialog的特点...
在压缩包中的“3-11(Dialog对话框)”文件,很可能是包含了一个或多个示例项目,这些项目可能涵盖了各种Dialog的用法,比如简单信息提示、单选/多选对话框、自定义布局的Dialog、以及处理用户输入的输入框Dialog等。...
在Android开发中,有时我们需要创建一个对话框(Dialog)来展示一些信息或者提供用户交互,例如选择、设置等。在这种情况下,如果对话框中的内容需要包含列表数据,我们就会使用到`Dialog`嵌套`ListView`的技术。这...
在Android开发中,对话框(Dialog)是一种常用的用户交互组件,用于向用户展示临时信息、进行选择操作或者请求用户确认。对话框分为多种类型,适应不同的应用场景。下面将详细介绍在Android中实现各种对话框的方式:...
本篇将详细介绍如何在Android中创建自定义的Dialog弹窗提示。 首先,我们需要理解Dialog的基本结构。Dialog通常由一个对话框窗口和一个内容视图组成。窗口负责Dialog的整体外观,包括背景、边框和阴影等;内容视图...
在Android开发中,对话框(Dialog)是一种常见的用户交互组件,用于向用户显示临时信息或进行简单的交互操作。默认的Android Dialog虽然功能齐全,但在某些情况下可能无法满足开发者对于界面美观和个性化的需求。...
在Android开发中,对话框(Dialog)是一种非常重要的组件,它用于向用户显示临时信息或者进行简单的交互。对话框不会占用整个屏幕,而是浮现在应用之上,为用户提供一种中断当前操作,进行确认、选择或其他操作的...
总之,SearchDialog库为Android开发者提供了一个高效、可定制的搜索对话框解决方案,而SearchView是Android系统提供的原生搜索组件,两者结合使用能帮助开发者构建更优秀的搜索功能,提升用户体验。在实际项目中,...
`Dialog`通常浮现在应用主界面之上,提供一种轻量级的交互方式,用户可以快速处理提示信息或者执行相关操作。在这个“android Dialog效果集合【全】”中,我们很可能会找到各种定制化`Dialog`的示例和实现方法。 `...