DialogFragment 实践
来源:互联网 发布:淘宝地址怎么删除不了 编辑:程序博客网 时间:2024/05/17 22:09
1.概述
第一次听说diaologFragment,今天找了一下,这里根据鸿神的博客实践下,做下记录,供下次使用:
2.dialogFragment 简介
dialogFragment是Android3.0推出的用于优化dialog显示,因为dialgog显示存在以下两个问题:
1.由于dialog显示依存于activity,所以当屏幕旋转的时候,dialog会重新创建,这就造成了用户输入的内容无法保存,而dialogFragment与fragment具有基本一致的生命周期,FragmentManager会自己管理Fragment的生命周期,在旋转的过程中,打印的log
E/MyDialogFragment: onAttachE/MyDialogFragment: onCreateDialogD/HwSensorManager: HwSensorManager version: 1.0.0E/MyDialogFragment: onCreateViewE/MyDialogFragment: onStartE/MyDialogFragment: onResumeE/MyDialogFragment: onPauseE/mainActivity: onPauseE/MyDialogFragment: onStopE/mainActivity: onStopE/MyDialogFragment: onDestroyE/mainActivity: onDestroyE/MyDialogFragment: onAttachE/mainActivity: onCreateE/MyDialogFragment: onCreateDialogE/MyDialogFragment: onCreateViewE/MyDialogFragment: onStartE/mainActivity: onStartE/mainActivity: onResumeE/MyDialogFragment: onResume
由此可知,dialogfragment也是重新创建了一遍,
2.dialogFragment是一个自成一体的东西,dialog放在activity里面,会严重影响activity的逻辑和显示,所以使用dialogFragemnt便于管理,
3.1onCreateView简单使用
3.1.1 layout布局资源,两个edittext,一个button,线性布局竖直排列
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/dialog_login_input_user"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/dialog_login_input_pwd"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/dialog_login_btn_login" android:onClick="click"/></LinearLayout>
3.1.2 重写 onCreatview dialogFragement中加载布局,
public class MyDialogFragment extends DialogFragment{ @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dialog_fragment_login, container, false); Log.e("MyDialogFragment","onCreateView"); return view; }
3.1.3 mainActivity 中展示
//mainActivity中的点击事件,主要就是myDialogFragment的show()函数 public void click(View v){ MyDialogFragment myDialogFragment = new MyDialogFragment(); myDialogFragment.show(getSupportFragmentManager(),"mydialog"); }
这样展示会显示标题,所以我们可以将标题去了,方法很简单,在onCreateView中调用
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
这就完成展示了,但是,经过实践,这种方法并不能保存dialogFragment中的数据,下面我们探索第二种方式
ps:上面的layout布局中采用的是线性布局,去除标题之后展示效果如下:
但是改为相对布局之后,就可以了,原因不明,还望大神指教
*3.2onCreateDialog方法
3.1的方式,主要用于自定义的dialog,那样我们可以随心所欲的自定义的dialog,oncreateDialog()函数是DialogFragment独有的,目的是为我们提供一种快捷的创建dialog的方式,
3.2.1 layout的资源,沿用上面的,不过去掉button,因为dialog可以直接设置button啊
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content"> <EditText android:id="@+id/et1" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/dialog_login_input_user"/> <EditText android:id="@+id/et2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/et1" android:hint="@string/dialog_login_input_pwd"/> <!--<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/dialog_login_btn_login" android:layout_below="@id/et2" android:onClick="click"/>--></RelativeLayout>
3.2.2 oncreateDialog中创建dialog,
@NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setView(View.inflate(getActivity(),R.layout.dialog_fragment_login,null)).setTitle(R.string.title).setPositiveButton(R.string.btn, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(getActivity(),R.string.btn,Toast.LENGTH_SHORT).show(); } }); AlertDialog alertDialog = builder.create(); // 注意这里返回的是一个alertDialog对象,因为要求的就是返回一个dialog对象啊 return alertDialog; }
3.2.3 mainActivity中show
public void click(View v){ MyDialogFragment myDialogFragment = new MyDialogFragment(); myDialogFragment.show(getSupportFragmentManager(),"mydialog"); }
这种方式,dialog的内容就可以保存了,只能归结于Android系统后面做了优化吧
这个dialog怎么向activity传递数据,当热是回调啊,比较简单,这里就不在赘述
4.在小屏幕展示dialog,在大屏幕上内嵌组件
4.1
- DialogFragment 实践
- DialogFragment实践与原理
- DialogFragment与Activity通信最佳实践
- DialogFragment
- dialogFragment
- DialogFragment
- DialogFragment
- DialogFragment
- DialogFragment
- DialogFragment
- DialogFragment
- DialogFragment
- DialogFragment
- dialogFragment
- DialogFragment
- DialogFragment
- DialogFragment
- Android DialogFragment
- 139. Word Break(unsolved)
- 基于像素的图像镶嵌
- 为什么IT厂商争着向云计算厂商转型?
- echarts的x轴自动动态刷新
- mongodb maven工程
- DialogFragment 实践
- POJ2395 Out of Hay
- 网络编程_TCP协议上传图片并给出反馈
- python字符串处理
- ffmpeg参数中文详细解释
- Hidden Password ZOJ
- unit12
- jsp中的 a标签加入单击事件 屏蔽href跳转页面
- 数据字典管理表空间 & 本地管理表空间 转换