Android Fragment

Fragment表示 Activity中的行为或用户界面部分。您可以将多个片段组合在一个 Activity 中来构建多窗格 UI,以及在多个 Activity 中重复使用某个片段。您可以将片段视为 Activity 的模块化组成部分,它具有自己的生命周期,能接收自己的输入事件,并且您可以在 Activity 运行时添加或移除片段(有点像您可以在不同 Activity 中重复使用的“子 Activity”)。

片段必须始终嵌入在 Activity 中,其生命周期直接受宿主 Activity 生命周期的影响。 例如,当 Activity 暂停时,其中的所有片段也会暂停;当 Activity 被销毁时,所有片段也会被销毁。 不过,当 Activity 正在运行(处于已恢复生命周期状态)时,您可以独立操纵每个片段,如添加或移除它们。 当您执行此类片段事务时,您也可以将其添加到由 Activity 管理的返回栈 — Activity 中的每个返回栈条目都是一条已发生片段事务的记录。 返回栈让用户可以通过按返回按钮撤消片段事务(后退)。

当您将片段作为 Activity 布局的一部分添加时,它存在于 Activity 视图层次结构的某个 ViewGroup内部,并且片段会定义其自己的视图布局。您可以通过在 Activity 的布局文件中声明片段,将其作为 <fragment> 元素插入您的 Activity 布局中,或者通过将其添加到某个现有 ViewGroup,利用应用代码进行插入。不过,片段并非必须成为 Activity 布局的一部分;您还可以将没有自己 UI 的片段用作 Activity 的不可见工作线程。


1. 为什么说Fragment被称为是第五大组件

Android 在 Android 3.0(API 级别 11)中引入了片段,主要是为了给大屏幕(如平板电脑)上更加动态和灵活的 UI 设计提供支持。由于平板电脑的屏幕比手机屏幕大得多,因此可用于组合和交换 UI 组件的空间更大。利用片段实现此类设计时,您无需管理对视图层次结构的复杂更改。 通过将 Activity 布局分成片段,您可以在运行时修改 Activity 的外观,并在由 Activity 管理的返回栈中保留这些更改。

Fragment的运用为Android开发带来了质的飞跃,解决了碎片化的问题,在不同屏幕尺寸和分辨率上都能有合理的展示,极大地提高了用户的体验。

2. Fragment生命周期

这里写图片描述
为更好的理解,结合Activity,如下图:
转自慕课网

  1. 在Fragment中调用Activity中的方法getActivity();
  2. 在Activity中调用Fragment中的方法接口回掉
  3. 在Fragment中调用Fragment中的方法findFragmentById()

3. Fragment加载到Activity中的方法:

主要有两种方法:静态加载&动态加载
1. 静态加载:添加Fragment到Activity的布局文件中;
2. 动态加载:

  1. 添加一个FragmentTransaction实例;
  2. add()方法加上Fragment的对象;
  3. 调用commit()方法使得FragmentTransaction实例的改变生效。

4.FragmentPagerAdapter与FragmentStatePagerAdapter的区别

FragmentPagerAdapter:保存所有加入的fragment,虽然步长超过1的页面会调用destroyItem,但是在fragment的生命周期里,只有onDestroyView调用了,没有调用onDestory,也没有调用onDetach,所以fragment只是把上面的view销毁了,fragment并没有销毁,下次再创建的时候,只会调用onCreateView和onActivityCreated,所以FragmentPagerAdapter里所有fragment都没有销毁,这样占用内存大,同时避免了频繁的销毁和创建,适用于页面比较少的情况。

FragmentStatePagerAdapter:对步长以内的fragment,跟FragmentPagerAdapter一样,不会调用任何销毁操作,再次显示也无需重新创建,对步长以外的fragment会调用destroyItem,跟FragmentPagerAdapter不一样,会真正销毁(同时销毁view和fragment,调用onDestroyView以及其后面的所有销毁方法),重建时会从最初的onAttach开始一直到onActivityCreated,适用于页面比较多的情况。

  • 当page数量少,用FragmentPagerAdapter;
  • 反之则用FragmentStatePagerAdapter;
  • 它们两的Fragment生命周期在ViewPage的切换过程中都会重复执行多次,所以它都不适用于App主页Tab。

5. 一些方法

主要的操作都是FragmentTransaction的方法:
FragmentTransaction transaction = fm.benginTransatcion();//开启一个事务

  • transaction.add() :往Activity中添加一个Fragment;
  • transaction.remove() :从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈,这个Fragment实例将会被销毁;
  • transaction.replace():使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体;
  • transaction.hide():隐藏当前的Fragment,仅仅是设为不可见,并不会销毁
  • transaction.show():显示之前隐藏的Fragment
  • detach():会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。
  • attach():重建view视图,附加到UI上并显示。
  • transatcion.commit():提交一个事务

参考、感谢:

  1. 片段
  2. Android Fragment 真正的完全解析(上)
  3. Android – Fragment 基本用法、生命周期与细节注意
  4. 论FragmentPagerAdapter与FragmentStatePagerAdapter的区别与使用场景
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值