Fragment在ViewPager里面的可见、隐藏

 我来答
华源网络
2022-07-10 · TA获得超过5598个赞
知道小有建树答主
回答量:2486
采纳率:100%
帮助的人:148万
展开全部
在操作 ViewPager 时,需要知道 Fragment 对用户展示、隐藏的时刻。

因为 ViewPager 通过 setOffscreenPageLimit 提供预加载的功能,所以传统生命周期的 onResume() 、 onPause() 不能准确的表达Fragment对用户是否可见。
传统的做法是给 ViewPager 的 onPageSelect() 事件里,发送一个广播,通知 Fragment 当前页发生了变化。 Fragment 对比自身 position 和广播携带的参数 position 是否一致,判断自己是否当前页,以此来执行 展示、隐藏操作。

Fragment的生命周期里,提供了一个 setUserVisibleHint(boolean isVisibleToUser) 函数。它的作用是告诉系统Fragment是否对用户可见,使用场景是在 ViewPager 的适配器 FragmentStatePagerAdapter 和 FragmentStatePagerAdapter
我们看下引用这个函数的地方

需要注意的是, setUserVisibleHint() 和 Fragment 的生命周期是没关联的的。

setUserVisibleHint,在 ViewPager 左右滑动的时候,因为预加载的机制,所以页面已经初始化好;
但是通过 setCurrentItem(页码); 跳到某个页面时,此时页面还未初始化。

我们业务里面的操作,需要页面布局已经完成,因此在使用它的时候,我们需要额外的技巧,下面修改后的 XLBaseFragment
子类重写 showToUserInViewPager 和 hideToUserInViewPager() 即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式