实现类似微信的延迟加载的Fragment——LazyFragment
来源:互联网 发布:网络直播平台排名 编辑:程序博客网 时间:2024/05/17 07:49
参考微信,使用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()。
- 实现类似微信的延迟加载的Fragment——LazyFragment
- Android实现类似微信的延迟加载的Fragment——LazyFragment
- Android实现类似微信的延迟加载的Fragment——LazyFragment
- Android实现类似微信的延迟加载的Fragment——LazyFragment
- [Android]实现类似微信的延迟加载的Fragment——LazyFragment
- Android实现类似微信的延迟加载的Fragment——LazyFragment
- [Android]实现类似微信的延迟加载的Fragment——LazyFragment
- 实现类似微信Viewpager-Fragment的惰性加载,lazy-loading
- Android 类似微信——摇一摇 的实现
- 用Fragment实现类似微信效果
- 使用ViewPager+RadioGroup+Fragment实现类似微信的底部导航
- 使用Fragment 写 微信类似的页面切换
- android 类似微信的摇一摇实现
- 微信切换界面延时加载的实现方法是优化ViewPager中加载Fragment
- 性能调优:ViewPager快速切换时卡顿的解决方案——Fragment内容延迟加载
- 性能调优:ViewPager快速切换时卡顿的解决方案——Fragment内容延迟加载
- 性能调优:ViewPager快速切换时卡顿的解决方案——Fragment内容延迟加载
- 实现Dll的延迟加载
- C++ 编程语言思维导图
- 【Java代码保护技术】Java代码保护开篇
- AFNetworking进行POST请求中 发送json数据有些特别
- jquery validate.addMethod 正则表达式 (自定义验证方法)
- 深入浅出TCP之send和 recv(转)
- 实现类似微信的延迟加载的Fragment——LazyFragment
- Android 音频设备调试
- Fasttrack 协议
- 使用msword.olb操作word(4)
- Leetcode 98 Validate Binary Search Tree 验证二叉查找树
- HAL理解
- 图片上传路径问题 左斜线换右斜线
- winform使用IrisSkin2换肤弹不出窗口解决方案
- 新SAT作文改革之重要变化及评分