Fragment的setUserVisibleHint方法没有被回调的原因

当使用FragmentPagerAdapter并设置第二个参数为BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT时,Fragment的setUserVisibleHint方法不会被回调。原因在于此设置只允许当前Fragment的onResume被回调。解决方法包括使用只有一个参数的构造或传入0,但这可能导致额外的onResume回调。onHiddenChanged方法虽然可作为替代,但仅在显隐状态变化时触发。
摘要由CSDN通过智能技术生成

前提说明

1.本文是使用Activity+ViewPager+Fragment+FragmentPagerAdapter的形式来说明这个问题的,其他使用Fragment的方式暂时不涉及;
2.本文使用的Fragment系列是AndroidX包下的,不是support包下,本文后续的说明都是基于AndroidX系列去说明这个问题,请注意这点。

开始正文

使用Fragment的时候经常会判断Fragment的可见与不可见,以便能够做刷新UI,埋点等操作。常见的情况我们都会在Fragment的生命周期中做这种操作,但是通过本文使用Fragment的方式来说,Fragment的生命周期回调有两种情况:

1. 使用FragmentPagerAdapter含有两个参数的构造,并且第二个参数的值是BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT

这种情况下就会出现如题的setUserVisibleHint方法不会被回调的情况,至于为什么,看一下FragmentPagerAdapter的源码就知道了,下面贴出一小部分做简单说明:

// FragmentPagerAdapter中的代码:
public FragmentPagerAdapter(@NonNull FragmentManager fm,@Behavior int behavior) {
   
        mFragmentManager = fm;
        mBehavior = behavior;
}

上面是AndroidX下的FragmentPagerAdapter的两个参数的构造,第二个参数可以传的值就两个,其中就有BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT这个值,实际上从这个值的翻译就看出来了,它的意思是"只有当前可见(正在显示)的这个Fragment的onResume方法(被回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值