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)
区别是第一个进入事务中,同时进入返回栈
第二个只是获得一个事务进行显示。
碎片对话框的好处是:即使设备发生旋转,碎片管理器会执行基本的状态管理,我们不需要做任何的状态管理,对话框就会重建。
相关推荐
代码为博客实例代码:http://blog.csdn.net/mp624183768/article/details/79066945 有问题博客留言
本文实例讲述了Android基于DialogFragment创建对话框的方法。分享给大家供大家参考,具体如下: /** * 使用DialogFragment创建对话框 * @description: * @author ldm * @date 2016-5-12 下午2:00:01 */ ...
DialogFragment在android 3.0时被引入。是一种特殊的Fragment。在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。
在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。 2、 好处与用法 使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其...
Android App中建议使用DialogFragment作为对话框的容器,DialogFragment类提供了创建对话框并管理其外观需要的所有控件,本文主要内容便为详解Android应用中DialogFragment的基本用法,而不再需要调用Dialog的方法需要...
处理使用AlertDialog创建DialogFragment并提供基本的MVVM事件。背景使用MVVM体系结构时,DialogFragments应该使用共享的ViewModel(在Activity的范围内)与其主机Activity或Fragment通信。 对话框事件(按钮单击或...
在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。 本文主要给大家介绍了关于Android中DialogFragment自定义背景与宽高的相关内容,分享出来供...
DialogFragment 在 Android 3.0 时被引入,是一种特殊的 Fragment,用于在 Activity 的内容之上显示一个静态的对话框。例如:警告框、输入框、确认框等。 1、DialogFragment 的优点 其实在 Android 中显示对话框有两...
8.2.2 将非托管对话框重新转换为托管对话框 8.2.3 简化托管对话框协议 8.3 使用Toast 8.4 资源 8.5 小结 第9章 管理和组织首选项 9.1 探索首选项框架 9.1.1 ListPreference 9.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 ...