Android开发---Fragment可见/不可见时的生命周期回调函数

项目中经常会碰到,需要在fragment失去焦点和获得焦点的方法中进行一些设置,但是fragment没有onpause()和onResume()方法,你重写的这两个方法,都是fragment依附的activity的生命周期。

那么需要fragment有像activity生命周期onpause()和onResume()这样的方法怎么办,谷歌为我们提供了setUserVisibleHint和onHiddenChanged这两个方法,这两个方法的使用场景是有所不同的!

 

1.FragmentPagerAdapter+ViewPager的使用场景

● 使用setUserVisibleHint

使用FragmentPagerAdapter+ViewPager时,切换回上一个Fragment页面时(已经初始化完毕),不会回调任何生命周期方法,也不会走onHiddenChanged()方法,所以在viewPage配合fragment搭建页面的情况下,切换页面时候,只能使用setUserVisibleHint方法。

        @Override

        public void setUserVisibleHint(boolean isVisibleToUser) {

           super.setUserVisibleHint(isVisibleToUser);

           if (isVisibleToUser) {

               // 相当于onResume()方法

           } else {

               // 相当于onpause()方法

           }

        }

viewpager+fragment中调用setUserVisibleHint的fragment的生命周期:

1   E/myfragment: setUserVisibleHint=false
2   E/myfragment: onAttach
3   E/myfragment: onCreate
4   E/myfragment: onCreateView
5   E/myfragment: onActivityCreated
6   E/myfragment: onStart
7   E/myfragment: onresume
8   E/myfragment: setUserVisibleHint=true   //该fragment可见时
9   E/myfragment: setUserVisibleHint=false  //该fragment不可见时
10  E/myfragment: onPause                   
11  E/myfragment: onStop
12  E/myfragment: onDestroyView
13  E/myfragment: onDestroy
14  E/myfragment: onDetach
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

说明:1-7生命周期是fragment初始化并加载到viewpager中时执行的。10-14是viewpager所在的activity被销毁过程中,fragment的生命周期执行过程。8是切换到该fragment可见时,9是该fragment不可见时。 

2.Fragment ,add()+show()的使用场景

● 使用onHiddenChanged的使用

hide()跳转新的Fragment时,旧的Fragment回调onHiddenChanged(),不会回调onStop()等生命周期方法,而新的Fragment在创建时是不会回调onHiddenChanged(),所以一般会和onresume()方法配合使用。具体场景自己来判断。

       @Override

        public void onHiddenChanged(boolean hidden) {

           if (hidden) {

                //相当于FragmentonPause

                    System.out.println("界面不可见");

               } else {

           // 相当于FragmentonResume

             System.out.println("界面可见");

           }

        }

 

另附:onHiddenChanged的回调时机

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


    Fragment内控制切换Fragment!

    //确定后跳到抓取图片碎片:Resultragment

    ManagerActivity managerActivity =(ManagerActivity) getActivity();

    managerActivity.setSelect(0);//切换到抓取成功fragment!

    前提是主Activity内写好了选择碎片的方法 如setSelect(0);


  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值