Android实现类似微信的延迟加载的Fragment——LazyFragment
来源:互联网 发布:戴尔色彩软件 编辑:程序博客网 时间:2024/05/17 07:21
来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4303910.html
参考微信,使用ViewPager来显示不同的tab,每个tab是一个Fragment,
假设有3个tab,对应的fragment是FragmentA、FragmentB、FragmentC
需要实现的效果是进入后,默认先只加载FragmentA,具体滑动到了哪个Fragment,再去加载该Fragment的数据。
可以参考如下BaseLazyFragment代码:
- /**
- * Author: wangjie
- * Email: tiantian.china.2@gmail.com
- * Date: 1/23/15.
- */
- public class BaseLazyFragment extends BaseFragment {
- private static final String TAG = BaseLazyFragment.class.getSimpleName();
- private boolean isPrepared;
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- initPrepare();
- }
- /**
- * 第一次onResume中的调用onUserVisible避免操作与onFirstUserVisible操作重复
- */
- private boolean isFirstResume = true;
- @Override
- public void onResume() {
- super.onResume();
- if (isFirstResume) {
- isFirstResume = false;
- return;
- }
- if (getUserVisibleHint()) {
- onUserVisible();
- }
- }
- @Override
- public void onPause() {
- super.onPause();
- if (getUserVisibleHint()) {
- onUserInvisible();
- }
- }
- private boolean isFirstVisible = true;
- private boolean isFirstInvisible = 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();
- }
- }
- }
- public synchronized void initPrepare() {
- if (isPrepared) {
- onFirstUserVisible();
- } else {
- isPrepared = true;
- }
- }
- /**
- * 第一次fragment可见(进行初始化工作)
- */
- public void onFirstUserVisible() {
- }
- /**
- * fragment可见(切换回来或者onResume)
- */
- public void onUserVisible() {
- }
- /**
- * 第一次fragment不可见(不建议在此处理事件)
- */
- public void onFirstUserInvisible() {
- }
- /**
- * fragment不可见(切换掉或者onPause)
- */
- public void onUserInvisible() {
- }
- }
如上代码,使用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()。
- Android实现类似微信的延迟加载的Fragment——LazyFragment
- Android实现类似微信的延迟加载的Fragment——LazyFragment
- Android实现类似微信的延迟加载的Fragment——LazyFragment
- [Android]实现类似微信的延迟加载的Fragment——LazyFragment
- Android实现类似微信的延迟加载的Fragment——LazyFragment
- [Android]实现类似微信的延迟加载的Fragment——LazyFragment
- 实现类似微信的延迟加载的Fragment——LazyFragment
- 实现类似微信Viewpager-Fragment的惰性加载,lazy-loading
- Android 类似微信——摇一摇 的实现
- android 类似微信的摇一摇实现
- Android 如何控制viewpager下的fragment的延迟加载
- Android 实现LazyFragment
- android Fragment作为tab时的延迟加载
- 用Fragment实现类似微信效果
- 使用ViewPager+RadioGroup+Fragment实现类似微信的底部导航
- android实现类似微信的开门效果
- Android: 实现类似QQ、微信的表情输入键盘
- Android: 实现类似QQ、微信的表情输入键盘
- 20160308接口内部类:Scanner、工厂设计模式、匿名类
- 一个简单的爬虫程序
- 如何合理的设置培训体系
- spring的自动装配Bean与自动检测Bean
- web学习(一)html标签
- Android实现类似微信的延迟加载的Fragment——LazyFragment
- Jquery学习笔记一:介绍下jquery
- android中废弃的,过时的,不推荐使用的一些类和方法
- Android播放视频的三种方式
- 某某农业有限公司网络营销工作计划
- Redis 作为缓存服务器的配置
- android PullToRrefresh自定义下拉刷新动画
- [2032 ]:杨辉三角
- python suds模块实现webservice客户端通讯