前提说明
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方法(被回