Android Fragment延迟加载数据
2016-03-30 11:28
537 查看
Fragment 中的 onResume、onPause是随着Activity的生命周期来实现的。
而有时我们的需求时,当有多个fragment需要切换时,比如视图上面有一排tab,下面有个ViewPager,滑动下
ViewPager或点下tab就要切换Fragment。这时如果一上来就全部加载,则内存消耗过大。
这里就可以利用fragment.setUserVisibleHint(boolean isVisibleToUser) 来延迟加载数据
isVisibleToUser:true,表示frag可见;false,表示frag不可见
以下代码参考:来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4303910.html
而有时我们的需求时,当有多个fragment需要切换时,比如视图上面有一排tab,下面有个ViewPager,滑动下
ViewPager或点下tab就要切换Fragment。这时如果一上来就全部加载,则内存消耗过大。
这里就可以利用fragment.setUserVisibleHint(boolean isVisibleToUser) 来延迟加载数据
isVisibleToUser:true,表示frag可见;false,表示frag不可见
以下代码参考:来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4303910.html
import android.support.v4.app.Fragment; /* * 生命周期: * onAttach,onCreate,onCreateView,onActivityCreated,onStart,onResume, * onPause,onStop,onDestroyView,onDestroy,onDetach * * setUserVisibleHint 的调用时机在 onActivityCreated之后 * */ public class BaseFragment extends Fragment { private boolean isPrepared; private boolean isFirstVisible = true; private boolean isFirstInvisible = true; public synchronized void initPrepare() { if (isPrepared) { onFirstUserVisible(); } else { isPrepared = true; } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initPrepare(); //第一次置isPrepared=true } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { if (isFirstVisible) { isFirstVisible = false; initPrepare(); } else { onUserVisible(); } } else { if (isFirstInvisible) { isFirstInvisible = false; onFirstUserInvisible(); } else { onUserInvisible(); } } } /** * 第一次fragment可见 */ public abstract void onFirstUserVisible(); /** * fragment可见(切换回来或者onResume) */ public abstract void onUserVisible(); /** * 第一次fragment不可见 */ public abstract void onFirstUserInvisible(); /** * fragment不可见(切换掉或者onPause) */ public abstract void onUserInvisible(); @Override public void onDetach() { super.onDetach(); } @Override public void onDestroy() { super.onDestroy(); } }
相关文章推荐
- Android属性动画完全解析(上),初识属性动画的基本用法
- Android中JNI编程详解
- Android中JNI编程详解
- Android Studio - Log神器
- Android开发错误Unable to execute dex: Multiple dex files define Lcom/baidu/android/b
- Android学习之RecyclerView
- Android Vitamio 播放器
- Android:Layout_weight的深刻理解
- android事件机制
- Android 应用(中英文)切换
- 查看APK签名
- Android获取视频文件某一帧并设置图片
- Android Studio 导入项目 出现安装Error:Cause: failed to find target with hash string 'android-23' 等错误
- Android Studio 导入项目 出现安装Error:Cause: failed to find target with hash string 'android-23' 等错误
- Android Studio中获取sha1证书指纹数据的方法
- android shape的使用
- Android内存泄露
- Android 数据库 短信 监听
- Android图文混排
- Android EditText图文混排的总结