Android中Fragment的懒加载
来源:互联网 发布:ipad有淘宝卖家版吗 编辑:程序博客网 时间:2024/05/19 06:17
在大部分安卓APP开发中都会用到ViewPager和Fragment的结合使用,而ViewPager又会出现预加载的情况,比如说打开app时第一个fragment和第二个fragment已经加载好了,当滑动到第二个fragment的时候第三个fragment已经加载好了,我们大多时候都希望当滑动到哪一页就加载哪一页,这样性能比较好也比较省流量,因此需要一个方法来解决这个问题。
BaseFragment中
import android.support.v4.app.Fragment;/** * Created by AZ001 on 2017/7/6. */public class BaseFragment extends Fragment { protected boolean mIsVisible = false; /** * 在这里实现懒加载. */ @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (getUserVisibleHint()) { mIsVisible = true; onVisible(); } else { mIsVisible = false; onInvisible(); } } protected void onInvisible() { } /** * 显示时加载数据,需要这样的使用 * 注意声明 isPrepared,先初始化 * 生命周期会先执行 setUserVisibleHint 再执行onActivityCreated * 在 onActivityCreated 之后第一次显示加载数据,只加载一次 */ protected void loadData() { } protected void onVisible() { loadData(); }}
在setUserVisibleHint中判断当前界面是否展示在用户面前,如果是那么执行onVisible()方法,否则执行onInvisible()方法
FirstPageFragment
import android.os.Bundle;import android.support.annotation.Nullable;/** * Created by AZ001 on 2017/7/6. */public class FirstPageFragment extends BaseFragment { private boolean isPrepared = false; private boolean isFirst = true; @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); isPrepared = true; //loadData的执行比onActivityCreated快,所以要保证onActivityCreated执行过,再去执行loadData方法,初始化完成后才能执行loadData方法 //比如当打开有4个fragment的界面的时候,第一个fragment执行了loadData方法但是还没有初始化,所以不能执行isParepared为false, //然后第一个界面和第二个界面的onActivityCreated已经先执行了,(这里setOffscreenPageLimit方法设置的数量为默认的)此时isPrepared为true。 //然后需要手动的去执行loadData方法(因为loadData已经执行了一次之前)。当切换到第二个界面的时候,由于onActivityCreated已经执行过了,初始化已经做好了,那么 //BaseFragment 中的onVisible方法会执行,随后子Fragment中的loadData方法执行了,就不会出现第一个界面打开时的情况 loadData(); } @Override protected void loadData() { //只有当fragment显示了 初始化完成了 第一次进入界面的时候才能进行数据请求 if (!mIsVisible || !isPrepared || !isFirst) { return; } //其他操作 }}
SecondPageFragment
import android.os.Bundle;import android.support.annotation.Nullable;/** * Created by AZ001 on 2017/7/6. */public class SecondPageFragment extends BaseFragment { private boolean isPrepared = false; private boolean isFirst = true; @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); isPrepared = true; //viewpager的预加载会先执行此方法 } @Override protected void loadData() { //只有当fragment显示了 初始化完成了 第一次进入界面的时候才能进行数据请求 if (!mIsVisible || !isPrepared || !isFirst) { return; } //其他操作 }}
在loadData方法中去请求数据,同时要判断是否展示当前界面,是否已经初始化了,是否已经执行过请求不用每次显示界面都去请求数据。
阅读全文
1 0
- Android中Fragment的懒加载
- Android 在 ViewPager 中使用 Fragment 的懒加载
- Android Fragment 懒加载
- Android开发技巧-Fragment的懒加载
- 浅析:Android--Fragment的懒加载
- Android高级----Fragment的懒加载
- Android的Viewpager+Fragment懒加载
- PagerFragmentAdapter中Fragment的懒加载问题
- Android中ViewPage+Fragment的预加载的取消
- Android viewpager + fragment 的懒加载 只加载一次
- Android 中加载v4包里面的fragment
- 在Android项目中Fragment加载地图的问题
- FragmentTabHost类实现android中Fragment的动态加载
- Android中Fragment的动态加载和双屏切换问题
- Fragment的懒加载
- Fragment的懒加载
- Fragment的懒加载
- Fragment 的懒加载
- (no.23) Find the Duplicate Number 多种方法探讨
- 记录kolla实践历程
- java的>>和>>>右移运算符讲解
- Error500错误的解决方法
- robots.txt SEO 与搜索引擎
- Android中Fragment的懒加载
- Java JDK和eclipse
- jobdu 题目1153:括号匹配问题
- 捡拾日记:闭锁、栅栏
- (20)static用法、特点、与非静态的区别、使用注意事项、利弊、什么时候用、对主函数的理解、对已封装好的类方法调用的理解
- GOROOT、GOPATH及go get
- poj-1579
- Java操作MongoDB
- package.json文件详解