首页 文章 精选 留言 我的

精选列表

搜索[网络延迟],共10010篇文章
优秀的个人博客,低调大师

[Android]实现类似微信的延迟加载的Fragment——LazyFragment

以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4303910.html 参考微信,使用ViewPager来显示不同的tab,每个tab是一个Fragment, 假设有3个tab,对应的fragment是FragmentA、FragmentB、FragmentC 需要实现的效果是进入后,默认先只加载FragmentA,具体滑动到了哪个Fragment,再去加载该Fragment的数据。 可以参考如下BaseLazyFragment代码: 1 /** 2 * Author: wangjie 3 * Email: tiantian.china.2@gmail.com 4 * Date: 1/23/15. 5 */ 6 public class BaseLazyFragment extends BaseFragment { 7 private static final String TAG = BaseLazyFragment.class.getSimpleName(); 8 private boolean isPrepared; 9 10 @Override 11 public void onActivityCreated(Bundle savedInstanceState) { 12 super.onActivityCreated(savedInstanceState); 13 initPrepare(); 14 } 15 16 17 /** 18 * 第一次onResume中的调用onUserVisible避免操作与onFirstUserVisible操作重复 19 */ 20 private boolean isFirstResume = true; 21 22 @Override 23 public void onResume() { 24 super.onResume(); 25 if (isFirstResume) { 26 isFirstResume = false; 27 return; 28 } 29 if (getUserVisibleHint()) { 30 onUserVisible(); 31 } 32 } 33 34 @Override 35 public void onPause() { 36 super.onPause(); 37 if (getUserVisibleHint()) { 38 onUserInvisible(); 39 } 40 } 41 42 private boolean isFirstVisible = true; 43 private boolean isFirstInvisible = true; 44 45 @Override 46 public void setUserVisibleHint(boolean isVisibleToUser) { 47 super.setUserVisibleHint(isVisibleToUser); 48 if (isVisibleToUser) { 49 if (isFirstVisible) { 50 isFirstVisible = false; 51 initPrepare(); 52 } else { 53 onUserVisible(); 54 } 55 } else { 56 if (isFirstInvisible) { 57 isFirstInvisible = false; 58 onFirstUserInvisible(); 59 } else { 60 onUserInvisible(); 61 } 62 } 63 } 64 65 public synchronized void initPrepare() { 66 if (isPrepared) { 67 onFirstUserVisible(); 68 } else { 69 isPrepared = true; 70 } 71 } 72 73 /** 74 * 第一次fragment可见(进行初始化工作) 75 */ 76 public void onFirstUserVisible() { 77 78 } 79 80 /** 81 * fragment可见(切换回来或者onResume) 82 */ 83 public void onUserVisible() { 84 85 } 86 87 /** 88 * 第一次fragment不可见(不建议在此处理事件) 89 */ 90 public void onFirstUserInvisible() { 91 92 } 93 94 /** 95 * fragment不可见(切换掉或者onPause) 96 */ 97 public void onUserInvisible() { 98 99 } 100 101 } 如上代码,使用setUserVisibleHint方法作为回调的依据, 暴露出来让子类使用的新的生命周期方法为: - onFirstUserVisible(); 第一次fragment可见(进行初始化工作) - onUserVisible(); fragment可见(切换回来或者onResume) - onFirstUserInvisible(); 第一次fragment不可见(不建议在此处理事件) - onUserInvisible(); fragment不可见(切换掉或者onPause) 具体的效果是: 1. 首先加载ViewPager,回调FragmentA(第一个默认呈现的Fragment)的onFirstUserVisible(),可以在这里进行FragmentA的初始化工作,其他Fragment保持不变。 2. 用户从FragmentA滑动到FragmentB,回调FragmentA的onUserInvisible()、FragmentB的onFirstUserVisible()(因为第一次切换到FragmentB,可以在这里进行初始化工作)。 3. 用户从FragmentB滑动到FragmentC,回调FragmentB的onUserInvisible()、FragmentC的onFirstUserVisible()(因为第一次切换到FragmentC,可以在这里进行初始化工作)。 4. 用户从FragmentC滑动到FragmentB,回调FragmentC的onUserInvisible()、FragmentB的onUserVisible()(因为FragmentB之前已经被加载过)。 5. 因为到此为止,suoyou的Fragment都已经被加载过了,所以以后这3个Fragment互相任意切换,只会回调原来Fragment的onUserInvisible()和切换后的Fragment的onUserVisible()。 6. 用户处于FragmentB,关闭手机屏幕,回调FragmentB的onUserInvisible()。 7.用户处于FragmentB,手机屏幕处关闭状态,然后开启手机屏幕解锁,只回调FragmentB的onUserVisible()。 本文转自天天_byconan博客园博客,原文链接:http://www.cnblogs.com/tiantianbyconan/p/4303910.html ,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册