看这篇文章前,大家应该先对setMaxLifecycle有所了解。
上年年末,谷歌为新版本的Fragment
添加了控制其在ViewPager
中的生命周期的新方式——setMaxLifecycle
(而ViewPager2
中默认且只有这个方式)。
听说后面还要把onActivityCreated
砍了,注意下。
setMaxLifecycle
的添加,简化了ViewPager
在切换对Fragment
可见性判断的复杂度,但是也增加了一些操X的问题:如果你使用了ViewPager
的setMaxLifecycle
。因为生命周期改变了,你的程序可能要做出相应的适配。
如果刚好你在用Fragmentation,又碰上了ViewPager
的setMaxLifecycle
,那么你就会发现只要打开了ViewPager所属的页面,ViewPager
容器内的所有Fragment
都会立刻调用了supportVisible()
可见可见函数,无论这些Fragment
是不是都显示了。当然,onLazyInitView
懒加载也被调用了。
目前我所知道有三种解决办法,分享下
1、找作者或者接手Fragmentation
项目的大佬解决这个问题。
2、自己动手丰衣足食
3、用回ViewPager
的BEHAVIOR_SET_USER_VISIBLE_HINT
方法这么多,足足有三个,我们来用下排除法找答案。
第一个呢,我也提了issue了,就看接手大佬能不能看到了。
第二个呢,需要自己download整个项目下来改,下文会讲
第三个呢,如果你用的ViewPager1
,这可能就是换个Adapter
或者改个参数的事,如果你用的是V