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的数据

  • 相关阅读:
    hihoCoder #1176 : 欧拉路·一 (简单)
    228 Summary Ranges 汇总区间
    227 Basic Calculator II 基本计算器II
    226 Invert Binary Tree 翻转二叉树
    225 Implement Stack using Queues 队列实现栈
    224 Basic Calculator 基本计算器
    223 Rectangle Area 矩形面积
    222 Count Complete Tree Nodes 完全二叉树的节点个数
    221 Maximal Square 最大正方形
    220 Contains Duplicate III 存在重复 III
  • 原文地址:https://www.cnblogs.com/bimingcong/p/5280369.html
Copyright © 2011-2022 走看看