您的位置:首页 > 产品设计 > UI/UE

Fragment学习笔记

2016-07-17 10:49 387 查看

1.Fragment的介绍

(Fragment英语翻译为碎片,片段。在我的直观想象中,Fragment它就像是那种魔法碎片一样,可以自由变换,自由组合)

Fragment是在Android 3.0版本引入的概念,是为了支持平板设备上更加灵活的UI设计。简单的说,它就像是activity的一个模块零件,通过它,可以利用屏幕空间设计出更合理的UI搭配。

要点:

Activity界面可以由不同的Fragment组成 (宋体 四号)

Fragment 拥有自己的生命周期并且可以接收、处理用户事件

Fragment可以静态和动态添加与移除。

掌握Fragment,则必须搞清楚几个重要的概念:Fragment的生命周期、Fragment回退栈(又是一个栈结构,和Activity的栈结构或许相似)、Fragment事务,掌握了这些,接下来就是Fragment的一些特殊用法以及最佳实践,还有可能会遇到的各种坑啦。

2.Fragment的生命周期

生命周期

各个方法的回调时机

onAttach() Fragment和Activity建立关联的时候调用
onCreate()
onCreateView()为Fragment加载布局时调用
onActivityCreated()当宿主Activity中的onCreate()方法执行完毕后调用
onStart() 当Fragment与用户可见时
onResume() 当Fragment准备好与用户交互时
onPause()  碎片不再与用户交互,因为其活动被暂停或者在活动中修改片段的操作
onStop() 与onPause()相同,此时不可见
onDestroyView() Fragment中的布局被移除时调用
onDestroy() 对碎片做最后的清理操作时调用
onDetach() Fragment和Activity解除关联的时候调用
按使用场景打印生命周期的回调
运行APP:    onAttach()
onCreate()
onCreateView()
onActivityCreated()
onStart()
onResume()
按下home键:
onPause()
onStop()
重新进入:
onStart()
onResume()
按下back键退出程序
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()


3.Fragment回退栈

在官方文档找到了一段对回退栈的描述:当宿主Activity处于onResume状态时,你可以单独操控fragment,比如添加或删除,当执行这样的一项事务时,可以将它添加到后台的一个栈中,这个栈由activity管理;activity里面的每个回退栈内容是fragment发生过的一条事务记录,此后回退栈允许用户通过按back键回退一项fragment事务。

addToBackStack(String);
当加入回退栈之前hide replace方法的使用:
hide当不希望视图重绘的时候
replace 会重绘


4.Fragment与Activity通信的最佳实践

这里我觉得鸿洋前辈的方法很好,使用接口回调的方式,把Fragment里组件的事件处理交给宿主Activity处理。降低Fragment与Activity的耦合,做到Fragment的重复使用

5.Fragment特殊用法

Fragment与ActionBar和MenuItem集成宿主Activity的Menu和Fragment的Menu叠加显示,并且可以各自控制自己的菜单事件.

没有布局的Fragment:

当Activity重合时,为了保存大量数据。

DialogFragment对话框(Android3.0引入,方便管理)

使用Dialog的两种方式:

1.实现onCreateView() 在此方法中加载对话框的布局.(Tips:去掉标题框getDialog().requestWindowFeature(Window.FEATURE_NO_TITILE))

2.实现onCreateDialog()在这里使用AlertDialog创建对话框

传递数据给Activity

使用接口回调的方式,在对话框的按钮事件中处理。

DialogFragment屏幕适配

设想这样的需求:一个对话框在大屏幕上以对话框的形式显示,而小屏幕上则直接嵌入当前的Activity中:

方法:1.通过重写onCreateView来设置布局文件

2.在默认的values下新建一个bools.xml 设置属性为false

3.然后在res下新建一个values-large文件,在其下也新建一个bools.xml 设置属性为true(表示大屏)

屏幕旋转数据恢复

如果是直接使用new AlertDialog()创建对话框,则当屏幕旋转时,第一不会保存用户输入的值,第二还会报异常,因为Activity销毁前不允许对话框未关闭;而使用DialogFragment的方式则不必考虑此问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android ui设计 Fragment