Fragment在ViewPager里面的可见、隐藏
展开全部
在操作 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() 即可
因为 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() 即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询