`
king_tt
  • 浏览: 2259059 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【Android 开发教程】DialogFragment

 
阅读更多

本章节翻译自《Beginning-Android-4-Application-Development》,如有翻译不当的地方,敬请指出。

原书购买地址http://www.amazon.com/Beginning-Android-4-Application-Development/dp/1118199545/


我们也可以创建另外一种碎片——DialogFragment。顾名思义,DialogFragment就是一个浮动在Activity上面的Fragment。当需要用户的反馈时,DialogFragment就会派上用场。与使用ListFragment类似,需要继承DialogFragment基类。

下面将会展示如何使用DialogFragment。

1. 创建一个工程:DialogFragmentExample。

2. 在包路径下面新建一个类,Fragment1。

public class Fragment1 extends DialogFragment {

	static Fragment1 newInstance(String title) {
		Fragment1 fragment = new Fragment1();
		Bundle args = new Bundle();
		args.putString("title", title);
		fragment.setArguments(args);
		return fragment;
	}

	@Override
	public Dialog onCreateDialog(Bundle savedInstanceState) {
		String title = getArguments().getString("title");
		return new AlertDialog.Builder(getActivity())
		.setIcon(R.drawable.ic_launcher)
		.setTitle(title)
		.setPositiveButton("OK",
				new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, 
					int whichButton) {
				((DialogFragmentExampleActivity)
						getActivity()).doPositiveClick();
			}
		})
		.setNegativeButton("Cancel",
				new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, 
					int whichButton) {
				((DialogFragmentExampleActivity)
						getActivity()).doNegativeClick();
			}
		}).create();
	}        

}
3. DialogFragmentExampleActivity.java中的代码。

public class DialogFragmentExampleActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Fragment1 dialogFragment = Fragment1.newInstance(
                "Are you sure you want to do this?");
            dialogFragment.show(getFragmentManager(), "dialog");   
    }
    
    public void doPositiveClick() {
        //---perform steps when user clicks on OK---
        Log.d("DialogFragmentExample", "User clicks on OK");
    }

    public void doNegativeClick() {
        //---perform steps when user clicks on Cancel---
        Log.d("DialogFragmentExample", "User clicks on Cancel");
    }

}
4. 按F11在模拟器上调试。会看到一个对话框,点击OK或Cancel按钮会弹出消息。


要创建一个DialogFragment,首先要继承DialogFragment基类:

public class Fragment1 extends DialogFragment{
}
在这个例子中,我没创建一个警告对话框,它包含一条警告消息和两个可供点击的按钮。在Fragment1类中,我们定义了一个newInstance()方法:

static Fragment1 newInstance(String title) {
		Fragment1 fragment = new Fragment1();
		Bundle args = new Bundle();
		args.putString("title", title);
		fragment.setArguments(args);
		return fragment;
	}
这个newInstance()方法允许创建一个碎片的实例对象,同时,它也可以接受一个指定的字符串参数,这个参数就是对话框中的消息。title对象被存储在一个Bundle对象中,之后会用到它。

接下来,我们定义了onCreateDialog()方法,这个方法在onCreate()之后,onCreateView()之前被调用:

        @Override
	public Dialog onCreateDialog(Bundle savedInstanceState) {
		String title = getArguments().getString("title");
		return new AlertDialog.Builder(getActivity())
		.setIcon(R.drawable.ic_launcher)
		.setTitle(title)
		.setPositiveButton("OK",
				new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, 
					int whichButton) {
				((DialogFragmentExampleActivity)
						getActivity()).doPositiveClick();
			}
		})
		.setNegativeButton("Cancel",
				new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, 
					int whichButton) {
				((DialogFragmentExampleActivity)
						getActivity()).doNegativeClick();
			}
		}).create();
	}        
然后,我们可以创建两个按钮OK和Cancel。对话框的标题是从Bunddle对象中取出来的。

想要把对话框碎片显示出来,我们创建一个它的实例,然后调用show()方法即可:

Fragment1 dialogFragment = Fragment1.newInstance(
                "Are you sure you want to do this?");
            dialogFragment.show(getFragmentManager(), "dialog");  
同时,我们需要实现两个回调方法,doPositiveClick()和doNegativeClick(),通过这两个方法去处理用户的输入事件:

public void doPositiveClick() {
        //---perform steps when user clicks on OK---
        Log.d("DialogFragmentExample", "User clicks on OK");
    }

    public void doNegativeClick() {
        //---perform steps when user clicks on Cancel---
        Log.d("DialogFragmentExample", "User clicks on Cancel");
    }

注:在Android 4.0版本以后,官方推荐使用DialogFragment去替换Dialog。大家可以看看Android 4.0的Launcher等源码,这些源码中大量使用了Fragment类。



分享到:
评论

相关推荐

    各种Dialogfragment功能demo

    在Android开发中,DialogFragment是一种非常重要的组件,它结合了Fragment和对话框的功能,使得开发者可以在应用程序中创建具有丰富交互性的对话框。本教程通过一个名为"DialogFragmentDemo"的示例项目,深入探讨...

    Android中使用DialogFragment编写对话框的实例教程

    在Android开发中,DialogFragment是用于创建对话框的一种方式,它是从Android 3.0(API级别11)引入的,以支持对话框基于Fragment的管理。DialogFragment不仅提供了更强大的生命周期管理,还允许在不同屏幕尺寸上...

    DialogFragment的使用及利用自定义interface点击事件并解决旋转屏幕点击事件失效问题

    在Android开发中,DialogFragment是Fragment的一个子类,它提供了创建对话框式界面的功能。相比传统的AlertDialog,DialogFragment更易于管理生命周期,与Activity的交互也更为灵活。本教程将深入探讨DialogFragment...

    封装一个通用Dialog,使用DialogFragment

    在Android开发中,创建对话框(Dialog)是常见的任务,用于与用户进行交互。DialogFragment是自Android 3.0(API级别11)引入的一个组件,它将Dialog的功能与Fragment的优势结合在一起,使得对话框的管理和显示更加...

    Android、教程<经典> 4 高级控件

    在Android开发领域,掌握高级控件的使用是提升应用界面交互性和用户体验的关键步骤。本教程将深入探讨Android系统中的各种高级控件,帮助开发者更好地利用这些工具构建功能丰富且用户友好的应用程序。以下是对...

    使用DialogFragment显示、搜索列表、recycleview+cardview列表

    在Android开发中,`DialogFragment`是一个非常重要的组件,它允许我们以对话框的形式展示内容。本教程将深入探讨如何利用`DialogFragment`来显示列表,以及如何在列表中集成搜索功能和使用`RecyclerView`结合`...

    ch04_android开发_

    在Android开发领域,"ch04_android开发_"可能是指一个章节或教程,专注于讲解如何在Android应用程序中使用各种用户界面元素和交互方式。这个压缩包包含了一些示例项目,可以帮助开发者深入理解Android应用中的关键...

    android 日期时间选择器

    在Android开发中,为用户提供一个可以同时选择日期和时间的组件是常见的需求,尤其是在创建事件、设置提醒等场景。在本教程中,我们将探讨如何在Android应用中实现一个类似于iPhone样式的日期时间选择器。 首先,...

    android ui开发程序

    在Android应用开发中,UI(用户界面)设计是至关...综上所述,这个“android UI开发程序”涵盖了Android开发中基础且关键的UI组件,通过学习这些内容,初学者能够掌握构建美观、功能丰富的Android应用界面的基本技能。

    Android自定义弹出多选框,可全选

    在Android开发中,自定义组件是一项常见的任务,它能够满足开发者对用户界面的个性化需求。本教程将聚焦于如何在Android应用中实现一个自定义的弹出多选框,并实现全选功能。这个自定义组件可以用于让用户在一组选项...

    Android系统对话框和自定义对话框实现

    在Android开发中,对话框(Dialog)是一种非常重要的组件,用于与用户进行交互,提供临时的通知或确认信息,或者在不中断主应用流程的情况下展示额外的功能。本教程将深入讲解如何在Android系统中创建和使用标准...

    android仿照苹果加载对话框

    在Android开发中,为了提供与iOS类似的用户体验,有时我们需要创建一个仿照苹果风格的加载对话框。这种对话框通常在执行耗时操作如网络请求、数据处理或文件加载时显示,以告知用户系统正在进行工作,并且他们需要稍...

    Android自定义对话框(代码)

    在Android开发中,自定义对话框(Custom Dialog)是一种常用的技术,它允许开发者根据应用的UI风格和功能需求创建个性化的对话框。本教程将详细讲解如何在Android中实现自定义对话框,并提供代码示例。 一、Android...

    Android自定义全屏Dialog实例

    在Android开发中,自定义全屏Dialog是一种常见的需求,它能提供更为沉浸式的用户体验,使得用户在处理特定任务时能够更加专注。本教程将详细讲解如何实现这样一个功能,旨在帮助开发者提升Android应用的界面设计与...

    android 自定义弹窗

    在Android开发中,自定义弹窗是提升用户体验和界面交互性的重要手段。它允许开发者根据应用的风格和功能需求创建个性化的提示、选择或输入窗口。本教程将深入探讨如何在Android中实现自定义弹窗,包括显示文字、图片...

    Android系统仿iPhone对话框

    在Android开发中,为了提供更好的用户体验,开发者常常需要对系统默认的UI元素进行自定义,以满足特定的设计需求。在本教程中,我们将探讨如何在Android系统中创建一个仿iPhone样式的对话框,以实现更加灵活和独特的...

    Android文件浏览器的开发 Android学习日志.zip

    这个"Android文件浏览器的开发 Android学习日志"压缩包很可能是包含一系列教程、源代码示例或笔记,用于帮助开发者掌握如何创建这样一个实用的应用程序。在Android应用开发中,文件浏览器通常涉及到以下几个关键知识...

    Android-一个轻量级易于实现和漂亮的方式来在Android上实一个教程pager或对话框

    在Android应用开发中,引导用户了解新功能或提供交互式教程是常见的需求。为了实现这一目的,开发者通常会使用Pager或者Dialog来展示一系列页面,以引导用户逐步熟悉应用的操作。本文将详细介绍如何在Android平台上...

    Android课件(4Dialog).zip

    在Android开发中,Dialog是一种非常重要的组件,它用于在用户界面中显示临时的、轻量级的窗口,通常用于向用户展示警告、确认信息或者进行简单的交互操作。本课件"Android课件(4Dialog).zip"可能包含了关于如何在...

    android资料

    【Android开发教程.pdf】 这份PDF文档通常包含了Android开发的基础到高级的知识,涵盖了从环境配置、SDK安装到Android Studio的使用。它可能讲解了如何创建第一个Android应用,包括XML布局文件的理解,活动...

Global site tag (gtag.js) - Google Analytics