Android编程心得---ViewPager+Fragment篇(一)初始化ViewPager的一些问题
2014-03-22 11:24
816 查看
项目中有需要在进入某个页面时,可以左右滑动效果,实现的方法很多,
实现方法的选择:
1.开源框架SlidingMenu,
2.自定义View,调用这个View的scrollBy(x, y) ,scrollTo(x, y)方法实现滑动
3.ViewPager+Fragment实现左滑右滑效果
综合各方面考虑,用Android自带的ViewPager+Fragment完全可以实现需要的效果,简单易操作!
适配器的选择:
1.PagerAdapter
2.FragmentPagerAdapter
3.FragmentStatePagerAdapter
我们这个项目每个页面都是一个Fragment所以选用FragmentPagerAdapter或FragmentStatePagerAdapter比较适合
FragmentPagerAdapter或FragmentStatePagerAdapter的区别?
使用FragmentPagerAdapter 时,Fragment对象会一直存留在内存中,所以当有大量的显示页时,就不适合用FragmentPagerAdapter 了,FragmentPagerAdapter 适用于只有少数的page情况,像选项卡。这个时候你可以考虑使用FragmentStatePagerAdapter ,当使用FragmentStatePagerAdapter 时,如果Fragment不显示,那么Fragment对象会被销毁,但在回调onDestroy()方法之前会回调onSaveInstanceState(Bundle
outState)方法来保存Fragment的状态,下次Fragment显示时通过onCreate(Bundle savedInstanceState)把存储的状态值取出来,FragmentStatePagerAdapter 比较适合页面比较多的情况,像一个页面的ListView
最后一点要注意,当使用FragmentPagerAdapter 时一定要为它的宿主ViewPager设置一个有效的ID !
今天暂时不深入探讨主要写ViewPager+Fragment实现时遇到的一些问题
1.设置ViewPager初始化时哪个Fragment页面
假设当前ViewPager一共有3个Fragment生成的页面,当默认加载的时候只加载了从左至右的两个Fragment。当滑动后才会加载第三个,然后滑动回来,第一个又被重新加载了。后来发现,我们初始化控件的时候一定要加上
[java] view
plaincopy
m_vp.setCurrentItem(1);
//ViewPager初始化第二个Fragment页面
0--》第一个Fragment 1-->第二个Fragment 以此类推
2.设置ViewPager初始化加载的Fragment页面数
但是测试setOffscreenPageLimit(1);//只加载一个页面时不行的,可以选择FragmentStatePagerAdapter适配器来实现只加载一个页面
[java] view
plaincopy
mViewPager.setOffscreenPageLimit(3); //一共加载3页,如果此处不指定,默认只加载相邻页
设置上面两个属性后,ViewPager加载3个Fragment创建的生命周期顺序
fragment2-->onCreate()
fragment2-->onCreateView()
fragment2-->onStart()
fragment2-->onResume()
fragment1-->onCreate()
fragment1-->onCreateView()
fragment3-->onCreate()
fragment3-->onCreateView()
fragment1-->onStart()
fragment1-->onResume()
fragment3-->onStart()
fragment3-->onResume()
实现方法的选择:
1.开源框架SlidingMenu,
2.自定义View,调用这个View的scrollBy(x, y) ,scrollTo(x, y)方法实现滑动
3.ViewPager+Fragment实现左滑右滑效果
综合各方面考虑,用Android自带的ViewPager+Fragment完全可以实现需要的效果,简单易操作!
适配器的选择:
1.PagerAdapter
2.FragmentPagerAdapter
3.FragmentStatePagerAdapter
我们这个项目每个页面都是一个Fragment所以选用FragmentPagerAdapter或FragmentStatePagerAdapter比较适合
FragmentPagerAdapter或FragmentStatePagerAdapter的区别?
使用FragmentPagerAdapter 时,Fragment对象会一直存留在内存中,所以当有大量的显示页时,就不适合用FragmentPagerAdapter 了,FragmentPagerAdapter 适用于只有少数的page情况,像选项卡。这个时候你可以考虑使用FragmentStatePagerAdapter ,当使用FragmentStatePagerAdapter 时,如果Fragment不显示,那么Fragment对象会被销毁,但在回调onDestroy()方法之前会回调onSaveInstanceState(Bundle
outState)方法来保存Fragment的状态,下次Fragment显示时通过onCreate(Bundle savedInstanceState)把存储的状态值取出来,FragmentStatePagerAdapter 比较适合页面比较多的情况,像一个页面的ListView
最后一点要注意,当使用FragmentPagerAdapter 时一定要为它的宿主ViewPager设置一个有效的ID !
今天暂时不深入探讨主要写ViewPager+Fragment实现时遇到的一些问题
1.设置ViewPager初始化时哪个Fragment页面
假设当前ViewPager一共有3个Fragment生成的页面,当默认加载的时候只加载了从左至右的两个Fragment。当滑动后才会加载第三个,然后滑动回来,第一个又被重新加载了。后来发现,我们初始化控件的时候一定要加上
[java] view
plaincopy
m_vp.setCurrentItem(1);
//ViewPager初始化第二个Fragment页面
0--》第一个Fragment 1-->第二个Fragment 以此类推
2.设置ViewPager初始化加载的Fragment页面数
但是测试setOffscreenPageLimit(1);//只加载一个页面时不行的,可以选择FragmentStatePagerAdapter适配器来实现只加载一个页面
[java] view
plaincopy
mViewPager.setOffscreenPageLimit(3); //一共加载3页,如果此处不指定,默认只加载相邻页
设置上面两个属性后,ViewPager加载3个Fragment创建的生命周期顺序
fragment2-->onCreate()
fragment2-->onCreateView()
fragment2-->onStart()
fragment2-->onResume()
fragment1-->onCreate()
fragment1-->onCreateView()
fragment3-->onCreate()
fragment3-->onCreateView()
fragment1-->onStart()
fragment1-->onResume()
fragment3-->onStart()
fragment3-->onResume()
相关文章推荐
- android viewpager + fragment 选中当前fragment再触发一些事情的问题
- Android编程心得-使用ActionBar+Fragment+ViewPager实现动态切换Menu效果
- Android App中ViewPager与Fragment结合的一些问题解决
- Android - ViewPager+Fragment初始化问题
- Viewpager + fragment,其中一些fragment不被保存在内存,切换导致初始化问题
- Android开发笔记 ViewPager 嵌套 RecyclerView instantiateItem数据初始化错位问题
- 解决android FragmentTabHost + viewpager + fragment 嵌套布局切换出现白屏什么都没有问题
- android scrollView 内嵌ViewPager或Gallery等水平滑动控件冲突问题解决实现同时滑动
- 【Android 应用开发】Android中使用ViewPager制作广告栏效果 - 解决ViewPager占满全屏页面适配问题
- android 解决ViewPager加载大量图片内存溢出问题
- Android编程心得-为TextView添加各种样式
- Android ViewPager被嵌套在ScrollView中不显示的问题的解决方案
- android UI设计的一些心得与问题解决
- 解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效问题(转)
- android UI设计的一些心得与问题解决(无效果图)
- Android自定义View 构造方法 遇到的一些问题
- 【转】android UI设计的一些心得与问题解决(无效果图)
- ViewPager使用中的一些小问题
- Android listview嵌套viewpager滑动冲突问题
- 【Android】ScrollView与ViewPager手势冲突问题解决