Fragment懒加载机制
来源:互联网 发布:淘宝网服装女装秋装 编辑:程序博客网 时间:2024/06/06 16:31
把Fragment放到Viewpager的时候,由于FragmentPagerAdapter缓存的原因,它会创建当前的Fragment和当前旁边两个的fragment。看下图
当我一进入这个页面的时候,当前页是“”全部“Fragment,左边没有,右边有一个“简餐便当”Fragment,它也会加载出来
07-21 16:24:27.945 23014-23014/? V/mytextframent全部: onCreate07-21 16:24:27.945 23014-23014/? V/mytextframent全部: onCreateView07-21 16:24:28.385 23014-23014/? V/mytextframent全部: onResume07-21 16:24:28.385 23014-23014/? V/mytextframent简餐便当: onCreate07-21 16:24:28.385 23014-23014/? V/mytextframent简餐便当: onCreateView07-21 16:24:28.825 23014-23014/? V/mytextframent简餐便当: onResume
很多时候,我们就把Fragment里的网络数据放在onCreate()或者 onCreateView()函数里去了,这样的话,可能还没有切换到当前页面的Fragment的数据也就加载好了,这样的坏处有:
1.可能用户根本就不会点到那个未加载的Fragment页面去,你却偷偷的给人家加载数据了,这不是浪费人家的流量么。
2.如果同时有3个页面都去加载网络数据,一般加载完数据还有更新界面操作,这样很容易导致页面卡顿,特别是还有用户会快速的滑动Viewpager,这样卡顿会更明显。
所以,为了消灭这种偷偷加载数据的行为,我们就要有这个懒加载机制。
懒加载机制:当切换到当前页面的时候,就加载本页面的数据,其他页面不加载。
下面我们就一步一步来完善这个懒加载。
Fragment有一个重载方法 public void setUserVisibleHint(boolean isVisibleToUser);
这个方法在当Fragment切换到当前页面的时候会被调用,并且isVisibleToUser为true,所以我们的网络记载操作可以放在这个方法里,
而且这里还要设一个已经发起过网络加载操作的标志loaddata,防止多次切换本页面到当前页而导致多次加载网络数据。
boolean loaddata=false; @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(isVisibleToUser&&!loaddata){ loaddata=true; //网络操作 } }
这样似乎就解决了懒加载问题,这也是网上大多数人推荐的写法,但你跑起应用的时候会发现等了半天也没数据,这是怎么回事?不知道那些人自己有没有写例子
这是因为当第一次创建Fragment的时候,setUserVisibleHint(boolean isVisibleToUser)这个方法没有被调用。
即使它被切换到当前的fragment。那这该怎么办呢?
我的方法是网络操作是onCreateView()这个重载方法中也要合适的进行网络加载的操作。
用一些变量对它进行控制
boolean loadata=false; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { if(contextView==null){ contextView = inflater.inflate(R.layout.headfragment_layout, container, false); } if(contextView!=null&&getUserVisibleHint()&&!loadata){ loaddata=true; //网络操作 } return contextView; }
只要Fragment没有被切换到可见状态,getUserVisibleHint()的返回值就会为false,就算创建了这个Fragment,如果没有被切换到前台也是不会进行网络操作的。
- Fragment懒加载机制
- Tablayout+Viewpager+Fragment组合使用以及懒加载机制
- tablayout+viewpager+fragment组合使用以及懒加载机制
- ViewPager+TabLayout+Fragment懒加载机制完全解析
- Fragment(碎片机制)的静态加载问题
- ViewPager加载Fragment懒加载
- Fragment中的懒加载
- Fragment懒加载
- fragment懒加载
- Fragment的懒加载
- Fragment的懒加载
- Fragment实现懒加载
- Fragment实现懒加载
- Fragment的懒加载
- Fragment懒加载
- ViewPager+Fragment懒加载
- Viewpager Fragment懒加载
- fragment 懒加载
- Psr(psr1+psr2+psr3)
- itextpdf为pdf文件添加目录(可跳转)
- CTF中Crypty(密码类)入门必看
- Odoo10在win10下部署
- Lottie动画动态定位以及缩放
- Fragment懒加载机制
- RandomAccessFile
- elasticsearch之Document APIs【Get API】
- 小程序tabBar添加
- 正则表达式(足够用了)
- 创建对象的方法
- MySQL日期时间函数
- Spring之IOC快速入门(一)
- Android 系统启动时 PackageManagerService 对应用组件信息表的构建过程