`

Fragment里面创建DialogFragment对话框

阅读更多

                                                            AUF法则下的对话框

 

【楔子】  在Actiity页面上做DiaLog似乎非常简单,大部分在学习了控件以后都会使用,但是google希望开发者只使用FragementDialog,刚开始不理解,后来发现碎片对话框真的太好用了,完全就是自我定制,其实就是设计一个xml布局,然后将它显示为对话框,这种自由形的对话框自然要比Activity本身的要好上很多。

 

【DialogFragment基础知识】想要做碎片的对话框,需要了解DialogFragment类,这个类继承自Fragment,所以行为相似。

【实现效果】:在一个fragment里面点击岛计时,跳出对话框



 

 

【第一步建立DialogFragment】

首先如同Fragment一样建立dialog.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="110dp"
            android:textSize="30dp"
            android:text="时" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="45dp"
             android:textSize="30dp"
            android:text="分" />

    </LinearLayout>

    <TimePicker
        android:id="@+id/mytime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/timesure"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:background="#33A18F"
        android:textColor="#FFFFFF"
        android:layout_marginBottom="20dp"
        android:text="确定" />

</LinearLayout>

 

接下来就是DialogFragment类:

package com.example.testdrawerlayoutleft;

import android.app.Activity;
import android.app.DialogFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
import android.widget.Toast;

public class TimeDialog extends DialogFragment{
	  private TimePicker mytime=null; 
	  private Button timesubmit;
	  public int hour;
	  public int minute;
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		  getDialog().setTitle("倒计时");
		  View view=inflater.inflate(R.layout.dialog, container);
		  mytime=(TimePicker)view.findViewById(R.id.mytime);  
		  timesubmit=(Button)view.findViewById(R.id.timesure);
		  timesubmit.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				 OnFragmentListener listener=(OnFragmentListener)getActivity();
			       listener.onFragmentListener(hour, minute);
				getDialog().dismiss();
				
			}
		});
		  mytime.setIs24HourView(true);
		  mytime.setCurrentHour(13);  
	      mytime.setCurrentMinute(14);  
	      mytime.setOnTimeChangedListener(new OnTimeChangedListener() {
			
			@Override
			public void onTimeChanged(TimePicker view, int hourOfDay, int minute1) {
				// TODO Auto-generated method stub
			     hour=hourOfDay;
			     minute=minute1;
			     Toast.makeText(getActivity(), hour+" "+minute, 100).show();
			}
		});
	      
		return view;
	}

}

 
关键代码:

public class TimeDialog extends DialogFragment

 

public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState)

 
【点击事件中的Fragment处理】:

监听radiobutton事件:

countdown.setOnCheckedChangeListener(new OnCheckedChangeListener() {
		
		@Override
		public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
			// TODO Auto-generated method stub
			main.showDialog("dialog");
			
		}
	});

 其中main就是主Activity,获取方式如下:

 Main main = (Main) getActivity();

 管理对话框显示方式还是写在主Activity里面:

public void showDialog(String tag){
		TimeDialog dialog=new TimeDialog();
		  dialog.show(getFragmentManager(), tag);
	}

 这里就全部完成了,是不是比较简单?

碎片对话框显示方式有两种

1.public int show(FragmentTransaction transaction ,String tag)

2.public int show(Fragment manager, String tag)

区别是第一个进入事务中,同时进入返回栈

第二个只是获得一个事务进行显示。

 

碎片对话框的好处是:即使设备发生旋转,碎片管理器会执行基本的状态管理,我们不需要做任何的状态管理,对话框就会重建。
 

 

 

0
0
分享到:
评论

相关推荐

    Android 官方推荐 : DialogFragment 创建对话框

    代码为博客实例代码:http://blog.csdn.net/mp624183768/article/details/79066945 有问题博客留言

    Android开发之基于DialogFragment创建对话框的方法示例

    本文实例讲述了Android基于DialogFragment创建对话框的方法。分享给大家供大家参考,具体如下: /** * 使用DialogFragment创建对话框 * @description: * @author ldm * @date 2016-5-12 下午2:00:01 */ ...

    DialogFragment Demo

    DialogFragment在android 3.0时被引入。是一种特殊的Fragment。在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。

    解决Android中自定义DialogFragment解决宽度和高度问题

    在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。 2、 好处与用法 使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其...

    详解Android应用中DialogFragment的基本用法

    Android App中建议使用DialogFragment作为对话框的容器,DialogFragment类提供了创建对话框并管理其外观需要的所有控件,本文主要内容便为详解Android应用中DialogFragment的基本用法,而不再需要调用Dialog的方法需要...

    MvvmDialogs

    处理使用AlertDialog创建DialogFragment并提供基本的MVVM事件。背景使用MVVM体系结构时,DialogFragments应该使用共享的ViewModel(在Activity的范围内)与其主机Activity或Fragment通信。 对话框事件(按钮单击或...

    Android中DialogFragment自定义背景与宽高的方法

    在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。 本文主要给大家介绍了关于Android中DialogFragment自定义背景与宽高的相关内容,分享出来供...

    Test2:测试git2

    DialogFragment 在 Android 3.0 时被引入,是一种特殊的 Fragment,用于在 Activity 的内容之上显示一个静态的对话框。例如:警告框、输入框、确认框等。 1、DialogFragment 的优点 其实在 Android 中显示对话框有两...

    精通ANDROID 3(中文版)1/2

    8.2.2 将非托管对话框重新转换为托管对话框  8.2.3 简化托管对话框协议  8.3 使用Toast  8.4 资源  8.5 小结  第9章 管理和组织首选项  9.1 探索首选项框架  9.1.1 ListPreference  9.1.2 ...

    精通Android 3 (中文版)2/2

    8.2.2 将非托管对话框重新转换为托管对话框  8.2.3 简化托管对话框协议  8.3 使用Toast  8.4 资源  8.5 小结  第9章 管理和组织首选项  9.1 探索首选项框架  9.1.1 ListPreference  9.1.2 ...

Global site tag (gtag.js) - Google Analytics