Fragment的懒加载

当我们的Viewpager含有很多个fragment时 一次全加载出来太占内存 我们可以用fragment的懒加载  当fragment可见的时候加载数据

Viewpager加载fragment的时候有个特点  会预加载当前可见页面左右相邻的页面  相邻的页面会走一遍生命周期(从onAttach直到onResume)

 1 /*
 2  * Date: 14-7-17
 3  * Project: Access-Control-V2
 4  */
 5 package cn.irains.access_control_v2.common;
 6
 7 import android.support.v4.app.Fragment;
 8
 9 /**
10  * Author: msdx ([email protected])
11  * Time: 14-7-17 下午5:46
12  */
13 public abstract class LazyFragment extends Fragment {
14     protected boolean isVisible;
15     /**
16      * 在这里实现Fragment数据的缓加载.
17      * @param isVisibleToUser
18      */
19     @Override
20     public void setUserVisibleHint(boolean isVisibleToUser) {
21         super.setUserVisibleHint(isVisibleToUser);
22         if(getUserVisibleHint()) {
23             isVisible = true;
24             onVisible();
25         } else {
26             isVisible = false;
27             onInvisible();
28         }
29     }
30
31     protected void onVisible(){
32         lazyLoad();
33     }
34
35     protected abstract void lazyLoad();
36
37     protected void onInvisible(){}
38 }

lazyfragment

setUserVisibleHint(boolean isVisibleToUser)在onCreateView之前执行

然后去定义一个类继承上边的父类

 1 /*
 2  * Date: 14-7-17
 3  * Project: Access-Control-V2
 4  */
 5 package cn.irains.access_control_v2.common;
 6
 7 import android.support.v4.app.Fragment;
 8
 9 /**
10  * Author: msdx ([email protected])
11  * Time: 14-7-17 下午5:46
12  */
13 public abstract class LazyFragment extends Fragment {
14     protected boolean isVisible;
15     /**
16      * 在这里实现Fragment数据的缓加载.
17      * @param isVisibleToUser
18      */
19     @Override
20     public void setUserVisibleHint(boolean isVisibleToUser) {
21         super.setUserVisibleHint(isVisibleToUser);
22         if(getUserVisibleHint()) {
23             isVisible = true;
24             onVisible();
25         } else {
26             isVisible = false;
27             onInvisible();
28         }
29     }
30
31     protected void onVisible(){
32         lazyLoad();
33     }
34
35     protected abstract void lazyLoad();
36
37     protected void onInvisible(){}
38 }

这样就保证了 只有在fragment可见时才去加载数据  不会造成activity一次加载很多fragment的数据

时间: 2024-08-02 06:54:35

Fragment的懒加载的相关文章

关于Fragment的懒加载问题

为了达到界面效果,我们有时需要使用到TabLayout+ViewPager的方式来布局界面,然而ViewPager的adapter总是默认把与当前可见的fragment相邻的两个fragment给加载出来.一旦界面数据太多,信息量太大,往往造成资源过多消耗,界面卡顿,甚至会造成程序崩溃...这时,我们就需要使用到fragment的懒加载方式,即第一次看到的时候自动加载当前页面,相邻的fragment不再预加载. Google官网提供给我们setUserVisibleHint这个方法.(API地址

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

?? Android ViewPager Fragment使用懒加载提升性能 Fragment在如今的Android开发中越来越普遍,但是当ViewPager结合Fragment时候,由于Android ViewPager内在的加载机制,导致一个比较严重的加载性能问题,具体来说,假设一个ViewPager中有n多个Fragment,那么ViewPager在初始化阶段将一次性的初始化FragmentPagerAdapter中的至少3个Fragment(如果Fragment多于3),创建和加载Fra

viewpager+fragment的懒加载实现微信点击和滑动切换功能(切换效果)

前言 1.从上一片文章之后已经半年没有写文章了,那篇文章之后公司进入疯狂的加班,一直到放年假.年后回来之后换了一家创业公司之后,然后又进入疯狂的加班(≧﹏ ≦) -所以一直都没有写文章(其实这都是借口⊙﹏⊙).现在公司没有那么忙了,也该把文章捡起来了,这毕竟是百利有一害的事(一害:费时间). 2.这半年里除了对代码的热情更加高涨(虽然它总是虐我千百遍(≧﹏ ≦) ),还深深的中了爬山的毒,对于年轻的我来说,爬山让我明白了许多.懂得了许多,也锻炼了我的身体.对于程序员来说身体是非常重要的,大家在周

Andriod开发技巧——Fragment的懒加载

我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源.这样的结果,我们当然不会满意.那么,能不能做到当切换到这个fragment的时候,它才去初始化呢? 答案就在Fragment里的setUserVisibleHint这个方法里.请看关于Fragment里这个方法的API文档(国内镜像地址:ht

Android之Viewpager+Fragment实现懒加载

我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用.而ViewPager默认会缓存三页数据,即:Viewpager每加载一个Fragment,都会预先加载此Fragment左侧或右侧的Fragment.而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源,浪费用户流量不止,还造成卡顿,这样的结果,我们当然不会满意.那么,能不能做到当切换到这个fr

FragmentViewpager与Fragment实现懒加载

做项目的时候会我也会遇到许许多多的问题,也会失望,想放弃,那就是心态的问题了,如果遇到问题你以积极的心态去解决,我相信任何问题都不是问题,记住万事,自有方法,关键是不怕问题,去解决它,把挫折转化为经验,那才是最好的. 好了,废话不多说了,我也改讲一讲怎么实现懒加载, 先看看界面是怎样的: 暂时没有数据,不影响我们的效果,界面是一个订单的Activity,布局是上面一个自定义的TitileBar,下面是一个TabLayout,一个最下面是一个Viewpager,待会会在viewpager里面通过V

ViewPager+Fragment实现懒加载

主要实现是复写Fragment下面这个方法,isVisibleToUser这个参数下面有解释: /** * Set a hint to the system about whether this fragment's UI is currently visible * to the user. This hint defaults to true and is persistent across fragment instance * state save and restore. * * <p

封装篇——Fragment懒加载

为什么要做fragment的懒加载封装呢???一个字"懒"!!! 我老大告诉我:不会偷懒的程序员不是个好厨师 ^~^ ^~^ ^~^ 我们可能会以 viewpager(或其他容器)与多个Fragment组合使用,相信使用过的猿(媛)友们都碰到过下面的这些问题: 1. 预加载Fragment时,也就是加载不可见的Fragment时,该不可见的Fragment初始化数据和页面可能占用了大量的资源: 2. 如果当页面内有动画或者是存在其它持续性的操作,fragment的状态切换时操作的开关问

Android--Fragment的懒加载

我们都知道,fragment放在viewPager里面,viewpager会帮我们预先加载一个,但是当我们要看fragment里面的内容时,我们也许只会去看第一个,不会去看第二个,如果这时候不去实现fragment的懒加载的话,就会多余的去加载一些数据,造成用户多消耗流量,所以我们采取懒加载的方式. 所谓懒加载,就是当fragment完全可见的时候我们再去加载数据 我们知道,当我们去滑动的时候,fragment会显示与隐藏,当fragment完全显示在我们的眼前时,fragment会调用一个方法