`
ipjmc
  • 浏览: 708258 次
  • 性别: 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怎么用的问题 ,看此文后 豁然开朗

相关推荐

    Dialog样式的Activity

    在Android开发中,`Dialog样式的Activity`是一种特殊类型的用户界面,它呈现为一个浮动的窗口,通常用于向用户展示一些重要信息或者进行简单的交互操作,而不会完全占据整个屏幕。这种方式可以使得用户在执行主要...

    dialog效果的activity

    在Android开发中,`dialog效果的activity`是一种常见的设计模式,它允许开发者将对话框(Dialog)的功能集成到一个独立的Activity中,从而实现更好的代码复用和模块化。这样的设计能够将对话框的逻辑与主Activity的...

    delphi xe5可用的ActivityDialog

    3. **Samples**:这是示例代码的目录,开发者可以参考这些示例了解如何在自己的项目中使用ActivityDialog控件,包括如何在界面上添加、配置以及如何响应其事件。 4. **Design**:这个目录通常包含设计时的支持文件...

    Dialog的正确使用方式

    AlertDialog通常用于展示简短的信息,可包含一个或多个按钮;ProgressDialog用于显示加载进度;而DatePickerDialog和TimePickerDialog则让用户选择日期和时间。 正确使用Dialog的第一步是理解其生命周期。Dialog的...

    Android 控制关闭Dialog

    在Dialog的父类中有一个名为`mShowing`的布尔型变量,这个变量控制着Dialog是否显示。通过反射,我们可以访问并修改这个变量的值,从而达到控制Dialog关闭与否的目的。 首先,我们需要获取到Dialog的`mShowing`字段...

    DialogActivity.zip

    综上所述,"DialogActivity.zip"项目涵盖了Android开发中的多个重要技术,包括自定义对话框的实现、WiFi功能的集成以及滑动菜单的使用。对于想要深入学习Android应用开发,特别是系统级功能集成和用户体验设计的...

    dialog和fragment的运用

    一个Activity可以包含多个Fragment,并通过FragmentManager进行管理。 Dialog与Fragment的结合使用,可以在不创建新的Activity的情况下,为用户提供更丰富的交互体验。例如,可以通过Fragment来实现一个复杂的功能...

    自定义带两个按钮的Dialog-修改

    本文将详细讲解如何实现一个带有两个按钮的自定义Dialog,并结合"DefinedDialog"这个压缩包文件中的内容,提供具体的步骤和代码示例。 一、自定义Dialog的基本结构 自定义Dialog通常涉及以下组件: 1. Dialog类:...

    Android使用Activity用作弹出式对话框

    在Android开发中,有时我们需要创建一个弹出式对话框来与用户进行交互,但不同于常见的`Dialog`类,我们可以利用`Activity`来实现这一功能。这种方式适用于需要更复杂交互或者自定义布局的情况。本文将详细讲解如何...

    dialog和spinner实例

    例如,在一个对话框中让用户从多个选项中选择。 - 为了实现这个功能,需要在`Dialog`的布局文件中添加`Spinner`元素,并在`Dialog`的代码中设置适配器和监听器。 - 当`Dialog`关闭时,确保所有与`Spinner`相关的...

    自定义Dialog 显示正在加载动画效果 progressDialog

    5. **在Activity中使用自定义Dialog**: 在需要显示加载Dialog的地方,实例化我们的自定义Dialog类,并调用`show()`方法。完成加载后,调用`dismiss()`方法关闭Dialog。 通过以上步骤,我们就能实现一个具有自定义...

    安卓Dialog对话框相关-项目通用Dialog.rar

    - 在异步操作中使用Dialog时,需要注意避免内存泄漏,确保在合适的时候调用`dismiss()`关闭Dialog。 - 对于Android版本兼容性问题,可能需要使用Support Library或AndroidX库来创建Dialog。 总之,Dialog在...

    Android中dialog常用样式

    可以在XML资源文件中定义一个新的主题,然后在创建Dialog时应用。例如,你可以改变对话框的背景颜色、文字颜色等。 ```xml <style name="CustomDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> ...

    底部自定以dialog添加recyclerView

    接口回调是一种简单的方法,需要在DialogFragment和Activity之间定义一个接口,当滑动条的值变化时,调用接口方法将值传递给Activity。EventBus则是另一种解耦的方式,滑动条控件发布事件,Activity订阅并处理这个...

    一个计算器Dialog..zip

    首先,我们关注的是如何在Android中创建一个自定义的Dialog。在Android Studio中,开发者通常会继承`AppCompatActivity`或`FragmentActivity`来创建Activity,而对于Dialog,我们可以继承`DialogFragment`。`...

    Android中Dialog使用详解

    本篇将详细讲解如何在Android中使用AlertDialog,以及相关的知识点。 首先,我们需要了解AlertDialog的基本结构。AlertDialog通常包含一个标题(Title)、一个消息文本(Message)和一组按钮,如“确定”、“取消”...

    Android dialog单选、多选弹窗

    在Android中,我们可以使用AlertDialog.Builder来创建一个单选对话框。首先,我们需要创建一个包含所有选项的数组或List,并通过setSingleChoiceItems()方法将它们添加到Builder中。然后,设置一个...

    Android各种特效的Dialog

    - Dialog是Android中的一个窗口,它浮在Activity之上,用于向用户展示信息或获取用户输入。通常,Dialog包括标题、内容区域和按钮。 - 默认的Dialog样式可能无法满足所有设计需求,因此开发者常常需要自定义Dialog...

    自定义带两个按钮的Dialog

    在Android中,我们可以使用`AlertDialog.Builder`来创建一个基本的Dialog,并通过调用`setTitle()`, `setMessage()`, `setPositiveButton()`等方法设置Dialog的属性。然而,这些方法只能满足简单的配置,对于更复杂...

    Android自定漂亮Dialog中嵌入ListView

    本教程将探讨如何在Android中自定义一个美观的Dialog,并在其内部嵌入一个ListView,以便展示更多信息。这个自定义Dialog可以用于显示一系列可选项目,用户可以通过点击ListView中的条目来进行交互。 首先,我们...

Global site tag (gtag.js) - Google Analytics