Android基础-Fragment

2019-06-12  本文已影响0人  VitaAin

Google Doc: https://developer.android.google.cn/guide/components/fragments

一、Fragment生命周期

fragment_lifecycle.png

Activity对Fragment生命周期的影响

activity_fragment_lifecycle.png

与 Activity 一样,假使 Activity 的进程被终止,而又需要在重建 Activity 时恢复 Fragment 状态,可以使用 Bundle 保留 Fragment 的状态。可以在 Fragment 的 onSaveInstanceState() 回调期间保存状态,并可在 onCreate()、onCreateView() 或 onActivityCreated() 期间恢复状态。

Activity 生命周期与 Fragment 生命周期之间的最显著差异在于它们在其各自返回栈中的存储方式。默认情况下,Activity 停止时会被放入由系统管理的 Activity 返回栈(以便用户通过“返回”按钮回退到 Activity,不过,仅当在移除 Fragment 的事务执行期间通过调用 addToBackStack() 显式请求保存实例时,系统才会将 Fragment 放入由宿主 Activity 管理的返回栈。


二、基本概念

Fragment核心类
衍生类

三、Fragment通信

1 Fragment向Activity传递数据

实现步骤:

  1. 在Fragment中定义接口,并在Activity中实现该接口;
  2. 将实现注入Fragment;
  3. Fragment中调用接口方法。

2 Activity向Fragment传递数据

实现步骤:
获取Fragment对象,并调用Fragment的方法即可,如setXXX(XXX xxx)方法。

3 Fragment之间通信

Fragment之间是没有任何依赖关系的,如果要进行Fragment之间的通信,需通过Activity作为中介,不要Fragment之间直接通信。

可使用EventBus


四、Fragment懒加载

懒加载:当Fragment完全可见的时候才去加载数据。
主要用在ViewPager+Fragment场景下。

原因:

Fragment放在ViewPager里面时,ViewPager会预先加载左右相邻的页面,但是很多时候我们也许只会去看第一个,不会去看第二个,如果这时候不实现Fragment的懒加载,就会多余加载一些数据,造成用户多消耗流量,所以建议采取懒加载的方式。

实现方式:

主要依赖Fragment的setUserVisibleHint(boolean isVisible)方法,此方法会在 onCreateView()之前执行。
当Fragment变为可见时,会调用setUserVisibleHint(true);当Fragment变为不可见时,会调用setUserVisibleHint(false)。
使用getUserVisibleHint()可以获取Fragment是否可见状态。

示例:

以下示例引用自 https://blog.csdn.net/vic6329063/article/details/82838430

Fragment懒加载.png

五、对Fragment的信息采集

SDK提供不同接口,分别对应Fragment的各个生命周期,进而采集信息。使用时,需要用户在Fragment的生命周期的各个环节中,调用对应的接口。
使用比较麻烦。

解决方法:

封装一个Fragment的子类,在子类中按照上述方法采集信息,开发时各Fragment直接继承这个子类。

上一篇 下一篇

猜你喜欢

热点阅读