[关闭]
@weidong 2017-07-20T07:35:15.000000Z 字数 1538 阅读 320

ViewPager + Fragment实现懒加载

Android课程


http://blog.csdn.net/tellh/article/details/50705178
http://www.jianshu.com/p/c5d29a0c3f4c

推荐框架
https://github.com/lianghanzhen/LazyViewPager

介绍

懒加载,指的是必要的时候才加载,否则不进行View的绘制和数据的加载。原因是Viewpager一次只会显示一个页面,那么初始进来时,只需加载第一张Fragment页卡,其他的不加载,当用户向右滑动切换再进行加载。
因为其他Fragment对于用户来说是不可见的,如果一开始就把全部Fragment一起加载,可能造成启动时卡顿的问题,更重要的是可能白白耗费用户的流量,因为用户可能并不需要其他Fragment的信息。

Fragment使用介绍

代码实现

  1. public abstract class BasePageFragment extends Fragment {
  2. //是否可见
  3. protected boolean isVisible;
  4. //View是否初始化
  5. protected boolean isViewInit;
  6. //数据是否初始化
  7. protected boolean isDataInit;
  8. /**
  9. * 在Activity完成其onCreate()回调之后调用
  10. * @param savedInstanceState
  11. */
  12. @Override
  13. public void onActivityCreated(Bundle savedInstanceState) {
  14. super.onActivityCreated(savedInstanceState);
  15. isViewInit = true;
  16. prepareFetchData();
  17. }
  18. /**
  19. * 当fragment被用户可见时,setUserVisibleHint()会调用且传入true值,
  20. * 当fragment不被用户可见时,setUserVisibleHint()则得到false值
  21. * @param isVisibleToUser
  22. */
  23. @Override
  24. public void setUserVisibleHint(boolean isVisibleToUser) {
  25. super.setUserVisibleHint(isVisibleToUser);
  26. this.isVisible = isVisibleToUser;
  27. prepareFetchData();
  28. }
  29. public boolean prepareFetchData() {
  30. //当前界面(Fragment)可见,并且Fragment已经初始化完毕、网络数据未加载,则请求数据
  31. if (isVisible && isViewInit && !isDataInit) {
  32. fetchData();
  33. isDataInit = true;
  34. return true;
  35. }
  36. return false;
  37. }
  38. public abstract void fetchData();
  39. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注