首页 技术 正文
技术 2022年11月23日
0 收藏 810 点赞 5,218 浏览 3435 个字

一、Fragment 生命周期中的每个方法的意义与作用:

1.setUserVisibleHint()(此方法不属于生命周期方法):设置Fragment 用户可见或不可见时调用此方法,此方法在Fragment所有生命周期执行之前执行。当Fragment 可见状态改变时,将调用此方法。

            获取Fragment的状态可见或不可见,通过调用getUserVisibleHint()方法获取。当Fragment是可见时则进行懒加载操作的。

            方法及参数:setUserVisibleHint(boolean isVisibleToUser)

(懒加载操作:只让用户看到的页面才会加载它需要展示的数据,即当Fragment可见时再进行数据加载,以提高效率)

2.onAttach():将Fragment 对象与Activity关联时,调用onAttach(Context ) 方法(方法onAttach(Activity)高版本已弃用,为兼容低版本用到,高版本适用),

调用此方法时,Fragment与Activity已完成绑定。

方法及参数:onAttacth(Context context)

3.onCreate():初始化Fragment,可通过savedInstanceState 获取之前保存的值。

方法及参数: onCreate(Bundle savedInstanceState)

4.onCreateView() :初始化Fragment布局,加载布局和findViewById操作通常在此方法中完成,单不建议执行耗时的操作,如获取数据库数据。

方法及参数:onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)

5.onActivityCreated():当Fragement 所在的Activity被启动完成后回调此方法,执行该方法时,与Fragment绑定的Activity的onCreate方法已经执行完成并返回,在该方法内可以进行与Activity交互的UI操作,

       所以在该方法之前Activity的onCreate方法并未执行完成,如果提前进行交互操作,会引发空指针异常。

方法及参数:onActivityCreated(Bundle savedInstanceState)

6.onStart():启动Fragment 时被回调,Fragment有不可见变为可见状态。此方法在Activity的onStart执行完立即执行,这个方法执行完Fragment界面就立即显示出来,但是还没有获取焦点,用户是不能操作的。

方法及参数:onStart()

7.onResume():调用onStart() 防范后面一定会调用此方法,恢复Fragment时回调,执行此方法时,Fragment处于活动状态,用户可与之交互。

方法及参数:onResume()

8.onPause():暂停Fragment,执行该方法时,Fragment处于暂停状态,但依然可见,用户不能与之交互。等同于Activity的Paused的状态,当Activity的onPause被调用时,Fragment的onPause同时被调用。

方法及参数:onPause()

9.onSaveInstanceState()(此方法不属于生命周期方法):保存当前Fragment的状态。该方法会自动保存Fragment的状态,比如EditText键入的文本,即使Fragment被回收又重新创建,一样能恢复EditText之前键入的文本。

10.onStop():执行该方法时,Fragment完全不可见,等同于Activity的Stopped状态,当Activity的onStop被调用时,Fragment的onStop()同时被调用。

方法及参数:onStop()

11.onDestory():销毁Fragment,通常按back键退出或者Fragment被回收时调用此方法。

方法及参数:onDestory()

12.onDetach():解除与Activity的绑定,在onDestory 方法之后调用。

方法及参数:onDetach()

二、Fragment生命周期执行流程:

1.Fragment 创建:setUserVisableHint() -> onAttach() ->onCreate() ->onCreateView() -> onActivityCreated() -> onStart() -> onResume()

2.Fragment变为不可见状态(锁屏、回到桌面、被Activity完全覆盖):onPause() -> onSaveInstanceState() -> onStop()

3.Fragment变为部分可见状态(打开Dialog样式的Activity):onPause() -> onSaveInstanceState()

4.Fragment由不可见变为活动状态:onStart() -> OnResume()

5.Fragment由部分可见变为活动状态:onResume()

6.退出应用:onPause()  -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()(注意退出不会调用onSaveInstanceState方法,因为是人为退出,没有必要再保存数据)

7.Fragment被回收又重新创建:被回收执行onPause() -> onSaveInstanceState() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()

8.重新创建执行:onAttach() -> onCreate() -> onCreateView() -> onActivityCreated() -> onStart() -> onResume() -> setUserVisibleHint()

9.横竖屏切换:与Fragment被回收又重新创建一样。

三、Fragment 执行hide、show生命周期执行:

当使用hide、show方法来控制Fragment使用时,Fragment生命周期将不执行,在onResume以及onPause方法处理的事情将由onHiddenChange进行管理,当Fragment调用hide隐藏时,

该方法会被调用,传入参数为true,表示该Fragment被隐藏了,当Fragment调用了show方法后,该方法传入的参数为false,表示该Fragment正在显示。

onHiddenChange 回调时机:

当使用add()+show()、hide()跳转到新的Fragment时,旧的Fragment回调 onHiddenChanged(),不会回调onStop()等生命周期方法,而新的Fragment在创建时是不会回调onHiddenChanged()。

  @Override
public void onHiddenChanged(boolen hidden){
super.onHiddenChanged(hidden);
if(hidden){//不在最前端界面显示,相当于调用了onPause() }else{//重新显示到最前端 ,相当于调用了onResume() //进行网络数据刷新 此处执行必须要在 Fragment与Activity绑定了 即需要添加判断是否完成绑定,否则将会报空(即非第一个显示出来的fragment,虽然onCreateView没有被调用,
//但是onHiddenChanged也会被调用,所以如果你尝试去获取活动的话,注意防止出现空指针) }}

下面是针对判断Fragment是否与Activity进行绑定做出相关修改:

public void onAttach(Context context) {
super.onAttach(context);
fragmentAndActivity++;//执行此方法 则说明会员Fragment 与Activity 绑定了, }public void onHiddenChanged(boolean hide){
super.onHiddenChanged(hide);
if(hide){ }
else if(hide==false&&fragmentAndActivity>0){
//进行网络数据刷新
}}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,291
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,718
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,555
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,326
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,964
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,124