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 {
      
  }
 }

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

Android - ViewPager+Fragment初始化问题的更多相关文章

  1. Android ViewPager Fragment使用懒加载提升性能

     Android ViewPager Fragment使用懒加载提升性能 Fragment在如今的Android开发中越来越普遍,但是当ViewPager结合Fragment时候,由于Androi ...

  2. android ViewPager+Fragment之懒加载

    说说写这篇博客的背景吧,前两天去面试,问到一个问题说的是:比如我们首页,是有3个fragment构成的,并且要是实现作用可以滑,那么这个最好的选择就是ViewPager+fragment了,但是我们知 ...

  3. Android ViewPager + Fragment的布局

    ViewPager And Fragment 1.之前有篇博客是讲ViewPager的用法的:http://www.cnblogs.com/liangstudyhome/p/3773156.html ...

  4. Android ViewPager+Fragment 在Activity中获取Fragment的控件

    如果ViewPager+Fragment实现Tab切换,在activity中利用adapter.getItem获取到fragment然后再根据fragment.的方法获取控件 //隐藏求租,以下代码用 ...

  5. Android Viewpager+Fragment实现滑动标签页

    ViewPager 结合Fragment实现一个Activity里包含多个可滑动的标签页,每个标签页可以有独立的布局及响应. 主页布局 <?xml version="1.0" ...

  6. Android viewPager+fragment实现滑页效果

    先上图,手指在手机向左或者向右滑就可以实现相应的页面切换. 先看activity_main.xml文件,非常简单,主要是三个标题TextView和viewpager <?xml version= ...

  7. Android ViewPager + Fragment实现滑动页面

    效果: PagerData类: package com.cloud.viewpagerdemo; import java.io.Serializable; class PagerData implem ...

  8. Android viewpager + fragment取消预加载

    1,在fragment中重写setUserVisibleHint方法private boolean isVisibleToUser;@Overridepublic void setUserVisibl ...

  9. android viewpager fragment 优化 切换界面 延时加载

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 使用 碎片的 设置用户可见暗示visible hint  这个方法来做到. hint 是 ...

随机推荐

  1. How to run a (Tomcat)Java application server on a Azure virtual machine

    http://www.windowsazure.com/en-us/documentation/articles/virtual-machines-java-run-tomcat-applicatio ...

  2. Java类的基本运行顺序

    不看不知道,一看还真吓了一跳!Java类的基本运行顺序你真的知道吗?如果你有疑惑,那就看下面这篇文章吧.   原文出自:[url]http://column.ibeifeng.com/chenchen ...

  3. Excel 统计在某个区间内数值的个数

    =COUNTIF(A1:A50,"<=1.0E-5")-COUNTIF(A1:A50,"<60")

  4. swif tableview全选

    func selctAll() { idArr.removeAll() for var i = 0; i<sellingArr.count; i++ { let path: NSIndexPat ...

  5. quay.io/coreos/etcd 基于Docker镜像的集群搭建

    etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现.etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理 ...

  6. App.xaml

    <Application x:Class="HelloWorld.App" xmlns="http://schemas.microsoft.com/winfx/20 ...

  7. ionic 总结

    希望大家都能有了好东西分享出来,单单就ionic来说,我是刚接触,现在用的人不是很多. 我认为如果大家能 有了好的东西或者好的方案 不藏着掖着,分享出来,那么我们的社区会更加活跃,用的人会越来越多,解 ...

  8. Training

    Purley Skylake RAS training: https://cisco.webex.com/ciscosales/lsr.php?RCID=8042a15a27aa46509a91d8f ...

  9. bzoj 4415: [Shoi2013]发牌

    4415: [Shoi2013]发牌 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 173  Solved: 124[Submit][Status][ ...

  10. ubuntu15.04 安装 pylab失败,先记下来,漫漫看

    pydo@planpls:/var/python/web2py$ pip install pylab Downloading/unpacking pylab Downloading pylab-0.1 ...