viewPaper+Fragment的布局,在初始化时会导致fragment的布局加载和网络请求数据(懒加载)
2016-07-12 13:56
417 查看
实现fragment的懒加载。问题一:Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态。 解决办法:在Fragment onCreateView方法中缓存Viewprivate View rootView;//缓存Fragment view@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {if(rootView==null){//缓存的rootView需要判断是否已经被加过parent, 如果有parent需要从parent删除,要不然会发生这个rootview已经有parent的错误。rootView=inflater.inflate(R.layout.tab_fragment, null);} ViewGroup parent = (ViewGroup) rootView.getParent(); if (parent != null) { parent.removeView(rootView); } return rootView;}这样就能保存状态,避免重发加载布局。二:防止在初始化viewPaper时创建了其他fragment的布局和加载了数据。(懒加载)实现思路:只有在当前fragment显示并且布局已经初始化完成后才加载数据。 http://blog.csdn.net/maosidiaoxian/article/details/38300627(此微博有讲创建一个基类Fragment,其他类来继承都可以用。) 下面是我自己写的方法。
1,//先初始化
private boolean isPrepared = false, isVisible = false;//是否加载完成,是否可见。
private View root;
2,onCreateView方法
@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {root = inflater.inflate(R.layout.infor_fragment, container, false);System.out.println("Infor_Fragment----onCreateView");isPrepared = true;//表示布局加载好了initView(root);return root;}
private void initView(View root) {System.out.println("Infor_Fragment----initView");
//只满足一个条件就不会往下执行了,别return了。下面了初始化控件和网络请求if (!isVisible || !isPrepared) {return;}
//初始化控件、网络请求}
3,关键方法(fragment有监听布局是否可见的方法)
@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {super.setUserVisibleHint(isVisibleToUser);System.out.println("Infor_Fragment----setUserVisibleHint");if (getUserVisibleHint()) {System.out.println("Infor_Fragment1----" + isVisible);isVisible = true;initView(root);//两个都为true,这个方法就可以一直往下执行。(此时才加载数据)} else {System.out.println("Infor_Fragment2----" + isVisible);isVisible = false;
//可以做一些销毁的操作。}}这个开发一定用得到,总结:1,防止fragment重复创建,保存状态减少网络请求,保存状态2,避免在第一次初始化时创建布局并加载数据。数据请求量非常大。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories