Fragment懒加载

所谓懒加载,即Fragment 的 UI 对用户可见时才加载数据
  • 关键方法public void setUserVisibleHint(boolean isVisibleToUser)

具体代码:

package com.example.uilayout;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created by pengshulin on 2017/5/5.
 * 

* 懒加载Fragment */ public abstract class LazyLoadFragment extends Fragment { /** * 控件是否初完成始化 */ private boolean isViewCreated; /** * 是否完成数据初始化 */ private boolean isLoadDataCompleted; @Override public void setUserVisibleHint(boolean isVisibleToUser) { // 只需要判断参数 isVisibleToUser 是否为 True 即可知道该 Fragment 的 UI 是否对用户可见 super.setUserVisibleHint(isVisibleToUser); // 对于单个 Fragment,setUserVisibleHint 是不会被调用的, // 只有该 Fragment 在 ViewPager 里才会被调用。 // 一个 ViewPager + Fragment 的 Demo, // 打印了一下 Log可以看到 setUserVisibleHint 的执行顺序如下 // setUserVisibleHint: isVisibleToUser = false // onAttach // onCreate // setUserVisibleHint: isVisibleToUser = true // onCreateView // onActivityCreated // onStart // onResume // onPause // onStop // onDestroyView // onDestroy // onDetach if (isVisibleToUser && isViewCreated && !isLoadDataCompleted) { loadData(); } } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View rootView = inflater.inflate(getLayoutId(), container, false); initView(rootView); isViewCreated = true; return rootView; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // * ViewPager 默认显示第一页,第一页肯定要先加载数据啊, // * 而且 setUserVisibleHint 的执行顺序又是在 onCreatView 之前, // * 同时 onCreatView 需要初始化界面和修改 isViewCreated 的值。 // * 所以就需要在 onActivityCreated 里执行一次咯。 if (getUserVisibleHint()) { loadData(); } } /** * 获取布局id * * @return */ protected abstract int getLayoutId(); /** * 初始化控件 * * @param rootView */ protected abstract void initView(View rootView); /** * 加载数据 */ protected abstract void loadData(); }

参考地址:http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650820834&idx=1&sn=694a94615494bfcaed07188e2601724a&scene=23&srcid=0808vHgojfq1vTzIpSDNBhwq#rd

你可能感兴趣的:(Fragment懒加载)