Fragment懒加载
来源:互联网 发布:睡眠软件app 编辑:程序博客网 时间:2024/05/21 17:52
所谓懒加载,即用户切到对应的fragment时才加载数据(Android默认加载可见fragment和可见fragment的左右fragment即3个fragment数据,这样可能会导致界面产生卡顿)
如何判断fragment是否可见
Fragmet提供了一个setUserVisibleHint
方法里有个isVisibleToUser
参数如果为True则为可见否则为不可见:
@Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser ) { //可见 }else{ //不可见 } }
setUserVisibleHint 在什么时候调用?
对于单个 Fragment,setUserVisibleHint
是不会被调用的,只有该 Fragment 在 ViewPager 里才会被调用。而setUserVisibleHint
在fragment的生命周期调用顺序如下
-> setUserVisibleHint(false) -> onAttach-> onCreate -> setUserVisibleHint(true) -> onCreateView -> onActivityCreated -> .... -> onDetach
LazyFragment
了解了原理,现在改写Fragment,增加loadData方法来进行数据加载
/** * Created by JokAr on 16/8/10. */public abstract class LazyFragment extends Fragment { //控件是否已经初始化 private boolean isCreateView = false; //是否已经加载过数据 public boolean isLoadData = false; /** * 返回layoutView * @param inflater * @param container * @return */ public abstract View getView(LayoutInflater inflater, ViewGroup container); /** * 初始化控件 */ public abstract void initViews(View view); @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = getView(inflater, container); initViews(view); isCreateView = true; return view; } //此方法在控件初始化前调用,所以不能在此方法中直接操作控件会出现空指针 @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser && isCreateView && !isLoadData) { loadData(); } } /** * 加载数据 */ public void loadData() { //如果没有加载过就加载,否则就不再加载了 if (!isLoadData) { //加载数据操作 isLoadData = true; } } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); //第一个加载fragment会调用 if (getUserVisibleHint()) loadData(); }}
这样就完成了,
getView
返回fragment的layout,initViews
初始化控件,loadData
加载数据
注意viewPager不保存Fragment问题
- 参考:http://blog.csdn.net/guo807015563/article/details/42081799
- 或者设置
viewPager.setOffscreenPageLimit
0 0
- ViewPager加载Fragment懒加载
- Fragment中的懒加载
- Fragment懒加载
- fragment懒加载
- Fragment的懒加载
- Fragment的懒加载
- Fragment实现懒加载
- Fragment实现懒加载
- Fragment的懒加载
- Fragment懒加载
- ViewPager+Fragment懒加载
- Viewpager Fragment懒加载
- fragment 懒加载
- Fragment懒加载
- Fragment 的懒加载
- Fragment 懒加载实战
- Fragment 的懒加载
- ViewPage Fragment 懒加载
- 【NOIP2012模拟8.20】Memory
- ViewPager+fragment显示数据的坑
- Socket编程中 listen函数第二个形参backlog的作用
- Ubuntu 16.04 安装wine-qq 7.8 并解决不能输入中文问题
- AGV自动导航控制系统
- Fragment懒加载
- 数独-java版
- BZOJ 2464: 中山市选[2009]小明的游戏
- java xstream解析xml
- Log4j AsyncAppender 源码
- ionic tab子页面隐藏
- Quartz 在 Spring 中如何动态配置时间
- leetcode-344. Reverse String
- 经典SQL语句大全(绝对的经典)