Android - ViewPager+Fragment初始化问题

Android应用开发中,经常会用到ViewPager + Fragment,虽然效果不错,但随之而来的还有一些问题,下面就说说其中的初始化问题。

ViewPager初始化时会预加载前后的2个页面,即使设置了setOffscreenPageLimit(0); 它至少也会预加载一个页面

但在实际场景中,可能我们不需要这个预加载的功能,这时我们就需要对其进行一些控制。

我使用的方法是setUserVisibleHint(boolean isVisibleToUser)

每次ViewPager预加载页面的时候,被预加载的Fragment都会调用这个方法,所以我就通过这个方法来控制Fragment里面的数据初始化

使用前提是Fragment页面的数量不是很多,设置setOffscreenPageLimit(所有Fragment的数量);

原因是如果不全部预加载,那么当滑动页面超出预加载范围之后,就会有页面被销毁,那么这个控制方法就失效了,当然,如果没有特殊的需求

不设置这个方法也不会有问题,主要看自己的需求。

具体方法如下:

public boolean canExcute = true;//为了onActivityCreated中setUserVisibleHint方法只执行一次

public boolean isFirstExcute = true;//标记页面是否是第一次加载,为了初始化只执行一次

 

@Override
 public void onActivityCreated(Bundle savedInstanceState) {
  super.onActivityCreated(savedInstanceState);
  if (canExcute) {//页面第一次加载时执行,以后不在执行
   canExcute = false;
   setUserVisibleHint(getUserVisibleHint());
  }
 }

 

@Override
 public void setUserVisibleHint(boolean isVisibleToUser) {
  super.setUserVisibleHint(isVisibleToUser);
  if (canExcute) {//onActivityCreated方法执行之前,不让此方法执行

   return;
  }
  if (isVisibleToUser && isFirstExcute) {// 页面可见并且是第一次加载
   isFirstExcute= false;//标记页面已经加载过一次,以后不需要在执行
   initData();//把你只需要初始化一次的数据写在这个方法里面
  }
  if (getUserVisibleHint()) {// 页面每次对用户可见时执行


  } else {
      
  }
 }

 

以上方法不一定对所有场景都适用,大家使用时还是需要经过测试并改进。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值