`
ipjmc
  • 浏览: 703270 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在一个Activity中使用多个Dialog

阅读更多

        Android Dev-Guide 推荐重写Activity.onCreateDialog()方法来创建Dialog,这样Dialog就归属于这个Activity了。使用方法是这样的,Activity.showDialog()激发Activity.onCreateDialog()创建Dialog,然后显示之,便于多个Dialog的统一管理。注意,以后再用Activity.showDialog()显示同一个Dialog时,则不会调用Activity.onCreateDialog(),而是调用Activity.onPrepareDialog(),使用上一次显示Dialog时的状态。即
    第一次:showDialog() -> onCreatedialog()
        以后: showDialog() -> onPrepareDialog()

        在示例代码中,分别用createExitDialog(),createListDialog(),createRadioDialog(),createCheckboxDialog(),创建4种Dialog,并在Activity中显示。示例代码如下:


package com.ipjmc.dialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class ShowDialogActivity extends Activity {
    /** Called when the activity is first created. */
	public static final String TAG = "ShowDialog";
	public static final int ID_EXIT_DIALOG = 1;
	public static final int ID_LIST_DIALOG = 2;
	public static final int ID_RADIO_DIALOG = 3;
	public static final int ID_CHECKBOX_DIALOG = 4;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        showDialog(ID_EXIT_DIALOG);
        showDialog(ID_LIST_DIALOG);
        showDialog(ID_RADIO_DIALOG);
        showDialog(ID_CHECKBOX_DIALOG);
    }
    
    @Override
    protected Dialog onCreateDialog(int id) {
    	// TODO Auto-generated method stub
    	Dialog dialog = null;
    	switch(id) {
    	case ID_EXIT_DIALOG :
    		dialog = createExitDialog();
    		break;
    	case ID_LIST_DIALOG :
    		dialog = createListDialog();
    		break;
    	case ID_RADIO_DIALOG :
    		dialog = createRadioDialog();
    		break;
    	case ID_CHECKBOX_DIALOG :
    		dialog = createCheckboxDialog();
    		break;
    	default :
    		break;
    	}
    	if (dialog != null) {
    		Log.i(TAG, dialog.toString());
    	} else {
    		Log.i(TAG, "dialog = null");
    	}
    	return dialog;
    }
    
    @Override
    protected void onPrepareDialog(int id, Dialog dialog) {
    	// TODO Auto-generated method stub
    	super.onPrepareDialog(id, dialog);
    }

    //创建简单Dialog
    public Dialog createExitDialog() {
    	AlertDialog.Builder builder = new AlertDialog.Builder(this);
    	builder.setMessage("Are you sure you want to exit?")
    	       .setCancelable(false)
    	       .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    	           public void onClick(DialogInterface dialog, int id) {
    	                ShowDialogActivity.this.finish();
    	           }
    	       })
    	       .setNegativeButton("No", new DialogInterface.OnClickListener() {
    	           public void onClick(DialogInterface dialog, int id) {
    	                dialog.cancel();
    	           }
    	       });
    	return builder.create();
    }

    //创建ListDialog
    public Dialog createListDialog() {
    	final CharSequence[] items = {"Red", "Green", "Blue"};

    	AlertDialog.Builder builder = new AlertDialog.Builder(this);
    	builder.setTitle("Pick a color");
    	builder.setItems(items, new DialogInterface.OnClickListener() {
    	    public void onClick(DialogInterface dialog, int item) {
    	        Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
    	    }
    	});
    	return builder.create();
    }

    //创建单选Dialog
    public Dialog createRadioDialog() {
    	final CharSequence[] items = {"Red", "Green", "Blue"};

    	AlertDialog.Builder builder = new AlertDialog.Builder(this);
    	builder.setTitle("Pick a color");
    	builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
    	    public void onClick(DialogInterface dialog, int position) {
    	        Toast.makeText(getApplicationContext(), position + " -> " + items[position], Toast.LENGTH_SHORT).show();
    	        dialog.dismiss();
    	    }
    	});
    	return builder.create();
    }

    //创建多选Dialog
    public Dialog createCheckboxDialog() {
    	final CharSequence[] items = {"Red", "Green", "Blue"};
    	final boolean [] checked = new boolean [] {false, false, false};
    	
    	AlertDialog.Builder builder = new AlertDialog.Builder(this);
    	builder.setTitle("Pick a color");
    	builder.setMultiChoiceItems(items, checked, new DialogInterface.OnMultiChoiceClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which, boolean isChecked) {
				// TODO Auto-generated method stub
				
			}
		});
    	
    	builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
	           public void onClick(DialogInterface dialog, int id) {
	                ShowDialogActivity.this.finish();
	           }
	       })
	       .setNegativeButton("取消", new DialogInterface.OnClickListener() {
	           public void onClick(DialogInterface dialog, int id) {
	                dialog.cancel();
	           }
	       });
    	
    	return builder.create();
   
    }
}
分享到:
评论
2 楼 yourancao520 2012-10-08  
好文章 ,学习了。
1 楼 yinIdiots11 2012-04-20  
初学者 开始没想到 showDialog(id)能直接调用oncreate()函数  一直纳闷id怎么用的问题 ,看此文后 豁然开朗

相关推荐

    Android 控制关闭Dialog

    我们添加的按钮不论是用setNegativeButton还是用setPositiveButton添加的按钮,点击的时候,都会关闭对话框,但是我们的一 些实际需求,就需要保留这个对话框不动,例如输入校验码,密码之类的校验问题,如果用户...

    Android开发之利用Activity实现Dialog对话框

    在Android中经常要使用Dialog来实现一些提示以及一些特殊的效果,而且样式也不一样,每次都得查一大堆资料,还不一定能解决。对话框是个好东西,创建简单有实用。当下的开发中,很多的开发者反而更喜欢使用activity...

    Android实现可使用自定义透明Dialog样式的Activity完整实例

    有时你需要一个对话框,但同时对话框中的内容有更多控制和能控制其生命周期,这时你可以使用带有Dialog样式的Activity来应用你的项目中,想使Activity有对话框那样效果可以在Androidmanifest中添加 Android:style/...

    多场景使用的侧滑菜单demo

    在博客http://blog.csdn.net/u013030399/article/details/51239536中有详细介绍,在项目开发中,经常需要在多个场景(Activity)中调用不同的侧滑菜单或窗口,我们常用的实现方式会有使用Popupwindow 和 Dialog等。...

    andorid dialog 大合集

    /**多个按钮信息框 **/ private static final int DIALOG_1 = 2; /**列表框 **/ private static final int DIALOG_2 = 3; /**进度条框 **/ private static final int DIALOG_3 = 4; /**单项选择列表框 **/ ...

    在fragment和activity中 如何对dialog中的spinner取值

    正常情况下我们可以直接在dialog里写上我们想要的view,但是有时候view太多的话,我们就需要自定义一个dialog,其实就是将dialog的内容替换为我们写好的layout文件。 比如我创建了一个layout文件: 效果如下: ...

    Android开发:自定义界面的Dialog,并且实现按钮的监听回调

    很多这种类型的dialog,界面千变万化,于是我建立了一个通用自定义dialog,可以实现以下功能: 1、界面的自定义,全部自己用xml定义界面; 2、不管是在Fragment,还是Activity都可以实例化该dialog,并且实现dialog...

    安卓Dialog对话框相关-这个适用于自己弄个推广或者广告一个悬浮的对话框并且点击下面activity的东西对话框不会消失.rar

    这个适用于自己弄个推广,或者广告,一个悬浮的对话框,并且点击下面activity 的东西,对话框不会消失.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    Android编程自定义Dialog的方法分析

    本文实例讲述了Android编程自定义Dialog的方法。...1. android 系统提供了一个class: Dialog. 而且你可以把自己的工作放在”protected void onCreate(Bundle savedInstanceState)” 在里面先调用系统的”

    android dialog根据弹窗等级排序显示的示例代码

    这里只是讲解单个activity中的弹窗排序,demo中还有维护多个activity 弹窗排序,详细看最下面github 做到工具组件化,不侵入原项目代码,无需继承,使用方便。 原理:当有一个dialog添加显示时,判断等级是否大于,...

    Android实现dialog的3D翻转示例

    本文实现了Android中dialog的3D翻转效果。这里通过一个简单的应用场景记录下。 效果图 起初自己的思路是Activity进行界面跳转实现旋转效果,网上看了很多,写下来发现效果不对。之后又看到Google上面的Card Flid ...

    Fragmentation-为"单Activity + 多Fragment","多模块Activity 多Fragment"架构而生,简化开发,轻松解决动画、嵌套、事务相关等问题。.zip

    为了更好的使用和了解该库,推荐阅读下面的文章:Fragment全解析系列(一):那些年踩过的坑Fragment全解析系列(二):正确的使用姿势Demo演示:均为单Activity 多Fragment,第一个为简单流式demo,第二个为仿微信...

    Android PopupWindow 筛选

    一个应用程序里面有多个activity和不同的对话框窗体,在我脑海深处的记忆力,对话框的使用一直都是new 出不同的dialog实例然后调用show 、dismiss方法,而弹出视图的控件监听很多时候都是在用CallBack回调函数处理,...

    Android开发中关于获取当前Activity的一些思考

    在Android开发过程中,我们有时候需要获取当前的Activity实例,比如弹出Dialog操作,必须要用到这个。关于如何实现由很多种思路,这其中有的简单,有的复杂,这里简单总结一下个人的一些经验吧。 反射 反射是我们...

    浅析Android中强大的Dialog

    下面将通过一个小实例,来像大家展示Android中功能强大的Dialog。代码都写了详细的注释,读者不妨试着手动去敲。 当然,由于时间的关系,还有个别功能没有完成,先有的几个展示效果中也可能有bug,代码也有很多需要...

    Android自定义对话框

    在我们的日常项目中很多地方会用到对话框,但是Android系统为我们提供的对话框样子和我们精心设计的界面很不协调,在这种情况下我们想很自由的定义对话框,或者有的时候我们的对话框是一个图片,没有标题和按钮,...

    BottomDialog:安卓底部滑出的对话框,支持多个对话框。An android bottom dialog view component with multiple views supports

    底部对话框 具有多个视图的android底部对话框视图组件支持。 | 英语 介绍 BottomDialog是android的一个组件,它允许您将底部...例如,在您的activity_main.xml中,您可能具有此内容视图 < TextView android

    android 浏览器之多窗口方案详解

    所以说,当我们想显示一个界面的时候,我们首先想到的是建立一个Activity,然后所有的操作在Activity里面实现,或者是一个Dialog或者Toast。这种方式固然简单,但是在有些情况下,我们要求的只是简单的显示,用...

    Android 8.0如何完美适配全局dialog悬浮窗弹出

    有时候我们需要在App中弹dialog,但是却不知道依附的是哪个Activity,这个时候通常会启动一个service来依附,显示一个全局的dialog。 Android 6.0出现的悬浮窗权限 为什么从6.0说起? 在Android6.0之后,使用悬浮窗...

    Android代码-快速开发框架

    这里没有太多的使用指南,更多是在Sample代码中体现。 若是有疑问的可随时提问,看到后就会及时处理 实现与介绍 界面 这部分包含了我在项目中所遇到的一些常见的界面结构的整理,其中Activity和Fragment都会有相匹配...

Global site tag (gtag.js) - Google Analytics