zoukankan      html  css  js  c++  java
  • 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的数据

  • 相关阅读:
    接口限流算法小记
    mac下操作小记
    Java代理(静态代理、JDK动态代理、CGLIB动态代理)
    关系数据库(RDBMS)小记
    Socket端口复用
    SSH使用小记
    HTTP缓存及其使用
    关于浏览器跨域访问(同源策略)
    awk入门教程
    链路追踪工具之Zipkin学习小记
  • 原文地址:https://www.cnblogs.com/bimingcong/p/5280369.html
Copyright © 2011-2022 走看看