• 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 (645079761@qq.com)
    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之前执行 

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

    public class OpenResultFragment extends LazyFragment{  
        // 标志位,标志已经初始化完成。  
        private boolean isPrepared;  
      
        @Override  
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
            Log.d(LOG_TAG, "onCreateView");  
            View view = inflater.inflate(R.layout.fragment_open_result, container, false);  
            //XXX初始化view的各控件  
        isPrepared = true;  
            lazyLoad();  
            return view;  
        }  
      
        @Override  
        protected void lazyLoad() {  
            if(!isPrepared || !isVisible) {  
                return;  
            }  
            //填充各控件的数据  
        }  
      
    }  
    OpenResultFragment

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

  • 相关阅读:
    使用Link Shell Extension方便的创建同步文件
    DOM案例【3】密码强度检查案例
    DOM案例【2】注册文本倒计时
    DOM案例【1】文本时钟
    HTML5 and CSS【01】Font
    常用单词
    CSS基础【01】类和ID选择器的区别
    【03】Html重点
    【02】Html(如鹏)
    C#MD5计算代码
  • 原文地址:https://www.cnblogs.com/bimingcong/p/5280369.html
Copyright © 2020-2023  润新知