android_基础_浅谈Fragment的状态可见与不可见[setUserVisibleHint和onHiddenChanged]

121 篇文章 1 订阅

转载自: https://www.jianshu.com/p/15bc451e2697

前言: 在项目中,我们经常会遇到在Fragment可见也就是获取焦点的时候,重新加载数据或者进行其他设置.但是Fragment本身是没有像Activity一样的onPause()和onResum()方法.那么问题来了,我们怎么才能知道fragment是可见还是不可见的呢?放心,谷歌为我们提供了两个方法,分别是setUserVisibleHint和onHiddenChanged这两个方法,注意这两个方法的使用场景是不相同的.

言归正传:

setUserVisibleHint的使用场景:FragmentPagerAdapter+ViewPager

这种方式我们还是比较常见的,譬如,谷歌自带的TabLayout控件,此种场景下,当我们切换fragment的时候,会调用setUserVisibleHint方法,不会调用onHiddenChanged方法,也不会走fragment的生命周期方法(fragment初始化完成之后,注意这里需要重写viewpager中使用的适配器的方法,让fragment不会被销毁,不然还是会遇到问题).具体方法提如下

@Override  

public void setUserVisibleHint(boolean isVisibleToUser) {

         super.setUserVisibleHint(isVisibleToUser);

        if (isVisibleToUser) {

              // 相当于onResume()方法--获取焦点  

       } else {

           // 相当于onpause()方法---失去焦点  

        }

}

另外之前的文章Android使用Fragment的懒加载 写了,此方法的调用时机,请注意调用的时间,以免出错.

onHiddenChanged的使用场景: 一般我们打开应用时底部会有四五个tab键,使用add()+show()来显示和隐藏Fragment,hide()跳转新的Fragment时,旧的Fragment回调onHiddenChanged(),不会回调onStop()等生命周期方法,而新的Fragment在创建时是不会回调onHiddenChanged(),所以一般会和onresume()方法配合使用。具体场景自己来判断。

@Override

public void onHiddenChanged(boolean hidden) {

               if (hidden) {

                 //相当于Fragment的onPause()

               } else {

                  // 相当于Fragment的onResume()

            }

    }

注意此方法在使用的时候,最好是等到fragment初始化完成以后,否则容易出错.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值