Fragment学习笔记

来源:互联网 发布:淘宝店铺售假24分重开 编辑:程序博客网 时间:2024/06/08 08:02

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特殊用法

  1. Fragment与ActionBar和MenuItem集成宿主Activity的Menu和Fragment的Menu叠加显示,并且可以各自控制自己的菜单事件.
  2. 没有布局的Fragment:
    当Activity重合时,为了保存大量数据。
  3. 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的方式则不必考虑此问题。

0 0
原创粉丝点击