Android之:viewpage +片段实现懒加载示例

  

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

  

该方法用于告诉系统,这个片段的UI是否是可见的,所以我们只需要继承片段并重写该方法,即可实现在片段可见时才进行数据加载操作,即片段的懒加载。

  

代码如下:
  

        包com.yctime.truelove.fragment;         进口android.content.Context;   进口android.nfc.Tag;   进口android.os.Bundle;   进口android.support.annotation.Nullable;   进口android.support.v4.app.Fragment;   进口android.util.Log;   进口android.view.LayoutInflater;   进口android.view.View;   进口android.view.ViewGroup;/* *   *基类片段   */公共抽象类BaseFragment延伸片段{      受保护的视图mRootView;   公共环境mContext;   布尔isVisible保护;   私人布尔isPrepared;   私人布尔isFirst=true;      公共BaseFragment () {//需要空的公共构造函数   }      @Override   公共空间setUserVisibleHint(布尔isVisibleToUser) {   super.setUserVisibleHint (isVisibleToUser);//日志。d(“标签”、“片段→setUserVisibleHint”);   如果(getUserVisibleHint ()) {   isVisible=true;   lazyLoad ();   其他}{   isVisible=false;>   保护无效lazyLoad () {   如果(!isPrepared | | ! isVisible | | ! isFirst) {   返回:   }   日志。d(“标签”,getClass () . getname () +”→initData () ");   initData ();   isFirst=false;   }      

这里我们做了三个判断,判断isPrepared和isVisible和isFirst只有全为真,才去执行initData()方法加载网络(或本地)数据。
  

  

①isPrepared参数在系统调用onActivityCreated时设置为真,这时onCreateView方法已调用完毕(一般我们在这方法里执行findviewbyid等方法),确保initData()方法不会报空指针异常。
  

  

②isVisible参数在片段可见时通过系统回调setUserVisibileHint方法设置为真,不可见时为假,这是片段实现懒加载的关键。
  

  

③isFirst确保:viewpage来回切换时BaseFragment的initData方法不会被重复调用,initData在该分段的整个生命周期只调用一次,第一次调用initData()方法后马上执行isFirst=false。
  

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

Android之:viewpage +片段实现懒加载示例