android的Viewpager 的各种经常的用法,朋友问我要过,所以就稍微总结一下,

ViewPager + Fragment 经常用到  代码是从   actionbarsherlock 中提取出来的,这个效果都知道是 滑动来切换的。直接上代码了

在这里简单说明一下 FragmentStatePagerAdapter 和 FragmentPagerAdapter

2个adapter

第一种 fragment状态adapter -  在当前只会存在   前1个fragment  当前 fragment 和 下1个 fragment   其他销毁 ,适合加载多数据

第二种 FragmentPagerAdapter  - 全部存在,所以不太适合加载 大量的数据 如图片什么的,很容易内存溢出。

工程结构:

1.    activity   adapter 在一起 (static类型的 Fragment)

  1. public class ViewPageFragment extends FragmentActivity {
  2. //这个是有多少个 fragment页面
  3. static final int NUM_ITEMS = 5;
  4. private MyAdapter    mAdapter;
  5. private ViewPager    mPager;
  6. private int  nowPage;
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.pagers_fragment_main);
  11. mAdapter = new MyAdapter(getSupportFragmentManager() );
  12. mPager = (ViewPager)findViewById(R.id.mypagers_pager);
  13. mPager.setAdapter(mAdapter);
  14. }
  15. /**
  16. *  有状态的 ,只会有前3个存在 其他销毁,  前1个, 中间, 下一个
  17. */
  18. public static class MyAdapter extends   FragmentStatePagerAdapter {
  19. public MyAdapter(FragmentManager fm) {
  20. super(fm);
  21. }
  22. @Override
  23. public int getCount() {
  24. return NUM_ITEMS;
  25. }
  26. //得到每个item
  27. @Override
  28. public Fragment getItem(int position) {
  29. return ArrayFragment.newInstance(position);
  30. }
  31. // 初始化每个页卡选项
  32. @Override
  33. public Object instantiateItem(ViewGroup arg0, int arg1) {
  34. // TODO Auto-generated method stub
  35. return super.instantiateItem(arg0, arg1);
  36. }
  37. @Override
  38. public void destroyItem(ViewGroup container, int position, Object object) {
  39. System.out.println( "position Destory" + position);
  40. super.destroyItem(container, position, object);
  41. }
  42. }
  43. /**
  44. * 无状态的 会全部加载着, 这个适合少量的 特别多的图片啊啥的 还是用  FragmentStatePagerAdapter
  45. * @author lilei
  46. */
  47. //    public static class MyAdapter extends  FragmentPagerAdapter  {
  48. //      public MyAdapter(FragmentManager fm ) {
  49. //            super(fm);
  50. //
  51. //        }
  52. //
  53. //        @Override
  54. //        public int getCount() {
  55. //            return NUM_ITEMS;
  56. //        }
  57. //
  58. //        @Override
  59. //        public Fragment getItem(int position) {
  60. //          // 返回相应的  fragment
  61. //            return ArrayFragment.newInstance(position);
  62. //        }
  63. //
  64. //        @Override
  65. //        public void destroyItem(ViewGroup container, int position, Object object) {
  66. //          System.out.println( "position Destory" + position);
  67. //          super.destroyItem(container, position, object);
  68. //        }
  69. //    }
  70. /**
  71. * 所有的  每个Fragment
  72. */
  73. public static class ArrayFragment extends Fragment {
  74. int mNum;
  75. static ArrayFragment newInstance(int num) {
  76. ArrayFragment  array= new ArrayFragment();
  77. Bundle args = new Bundle();
  78. args.putInt("num", num);
  79. array.setArguments(args);
  80. return array;
  81. }
  82. @Override
  83. public void onCreate(Bundle savedInstanceState) {
  84. super.onCreate(savedInstanceState);
  85. mNum = getArguments() != null ? getArguments().getInt("num") : 1;
  86. System.out.println("mNum Fragment create ="+ mNum);
  87. }
  88. @Override
  89. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  90. Bundle savedInstanceState) {
  91. System.out.println("onCreateView = ");
  92. //在这里加载每个 fragment的显示的 View
  93. View v = null;
  94. if(mNum == 0){
  95. v = inflater.inflate(R.layout.pagers_fragment1, container, false);
  96. ((TextView)v.findViewById(R.id.textView1)).setText(mNum+ "= mNum");
  97. }else if(mNum == 1){
  98. v = inflater.inflate(R.layout.pagers_fragment1, container, false);
  99. ((TextView)v.findViewById(R.id.textView1)).setText(mNum+ "= mNum");
  100. }else  if(mNum == 2){
  101. v = inflater.inflate(R.layout.pagers_fragment1, container, false);
  102. ((TextView)v.findViewById(R.id.textView1)).setText(mNum+ "= mNum");
  103. }else{
  104. v = inflater.inflate(R.layout.pagers_fragment1, container, false);
  105. ((TextView)v.findViewById(R.id.textView1)).setText(mNum+ "= mNum");
  106. }
  107. return v;
  108. }
  109. @Override
  110. public void onActivityCreated(Bundle savedInstanceState) {
  111. System.out.println("onActivityCreated = ");
  112. super.onActivityCreated(savedInstanceState);
  113. }
  114. @Override
  115. public void onDestroyView(){
  116. System.out.println(mNum + "mNumDestory");
  117. super.onDestroyView();
  118. }
  119. @Override
  120. public void onDestroy(){
  121. super.onDestroy();
  122. }
  123. }
  124. }

2. 和 1也没什么太大区别( 个中用处 看个人了 )

  1. public class ViewPageFragmentCS extends FragmentActivity {
  2. //这个是有多少个 fragment页面
  3. private MyAdapter    mAdapter;
  4. private ViewPager    mPager;
  5. private List<Entity> list =  new ArrayList<ViewPageFragmentCS.Entity>();;
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.pagers_fragment_main);
  10. for (int i = 0; i < 7 ; i++) {
  11. Entity ee = new Entity();
  12. ee.name = "ll"+ i;
  13. ee.age  = ""+ i;
  14. list.add(ee);
  15. }
  16. mAdapter = new MyAdapter(getSupportFragmentManager(),list);
  17. mPager = (ViewPager)findViewById(R.id.mypagers_pager);
  18. mPager.setAdapter(mAdapter);
  19. }
  20. private class Entity{
  21. public String name;
  22. public String age;
  23. }
  24. // 在这里你可以传 list<Fragment>  也可以传递  list<Object>数据
  25. public class MyAdapter extends FragmentStatePagerAdapter {
  26. List<Entity> list_ee;
  27. public MyAdapter(FragmentManager fm, List<Entity> ee) {
  28. super(fm);
  29. this.list_ee = ee ;
  30. }
  31. @Override
  32. public int getCount() {
  33. return list_ee.size();
  34. }
  35. // 初始化每个页卡选项
  36. @Override
  37. public Object instantiateItem(ViewGroup arg0, int position) {
  38. ArrayFragment ff  = (ArrayFragment)super.instantiateItem(arg0, position);
  39. ff.setThings(list_ee.get(position),position);
  40. return  ff;
  41. }
  42. @Override
  43. public void destroyItem(ViewGroup container, int position, Object object) {
  44. System.out.println( "position Destory" + position);
  45. super.destroyItem(container, position, object);
  46. }
  47. @Override
  48. public Fragment getItem(int arg0) {
  49. // TODO Auto-generated method stub
  50. return new ArrayFragment();
  51. }
  52. }
  53. /**
  54. * 所有的  每个Fragment
  55. */
  56. public  class ArrayFragment extends Fragment {
  57. private  Entity ee;
  58. private int position;
  59. public void setThings(Entity ee,int position){
  60. this.ee =ee ;
  61. this.position = position;
  62. }
  63. @Override
  64. public void onCreate(Bundle savedInstanceState) {
  65. super.onCreate(savedInstanceState);
  66. }
  67. @Override
  68. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  69. Bundle savedInstanceState) {
  70. System.out.println("onCreateView = ");
  71. //在这里加载每个 fragment的显示的 View
  72. View  v = inflater.inflate(R.layout.pagers_fragment1, container, false);
  73. ((TextView)v.findViewById(R.id.textView1)).setText(ee.name+ "= ee.Name -=age"+ ee.age);
  74. return v;
  75. }
  76. @Override
  77. public void onActivityCreated(Bundle savedInstanceState) {
  78. System.out.println("onActivityCreated = ");
  79. super.onActivityCreated(savedInstanceState);
  80. }
  81. @Override
  82. public void onDestroyView(){
  83. System.out.println("onDestroyView = "+ position);
  84. super.onDestroyView();
  85. }
  86. @Override
  87. public void onDestroy(){
  88. System.out.println("onDestroy = "+ position);
  89. super.onDestroy();
  90. }
  91. }
  92. }

直接复制过去就可以看效果了   别忘记  V4包,xml 布局文件 自己随便整个吧。

滑动到第3个页面的时候可以看到     第1个页面销毁   第4个生成,    当前存在   2  3   4

android 中的 ViewPager+ Fragment的更多相关文章

  1. Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突?

    DrawerLayout 是 Android 官方的侧滑菜单控件,而 ViewPager 相信大家都很熟悉了.今天这里就讲一下当在 DrawerLayout 中嵌套 ViewPager 时,要如何解决 ...

  2. Android中FragmentPagerAdapter对Fragment的缓存(一)

    ViewPager + FragmentPagerAdapter,时我们经常使用的一对搭档,其实际应用的代码也非常简单,但是也有一些容易被忽略的地方,这次我们就来讨论下FragmentPagerAda ...

  3. Android中使用ViewPager实现屏幕页面切换和页面切换效果

    之前关于如何实现屏幕页面切换,写过一篇博文<Android中使用ViewFlipper实现屏幕切换>,相比ViewFlipper,ViewPager更适用复杂的视图切换,而且Viewpag ...

  4. Android中FragmentPagerAdapter对Fragment的缓存(二)

    上一篇我们谈到了,当应用程序恢复时,由于FragmentPagerAdapter对Fragment进行了缓存的读取,导致其并未使用在Activity中新创建的Fragment实例.今天我们来看如何解决 ...

  5. Android中使用ViewPager实现广告条

    我们在使用电商或视频的手机客户端时,通常会看到广告条的效果.在网上搜索时才知道使用的是ViewPager,于是自己也做了一个Demo. 以下是效果图: 图中包括背景图片.文字描述以及白点. 其中Vie ...

  6. 【Android 应用开发】Android中使用ViewPager制作广告栏效果 - 解决ViewPager占满全屏页面适配问题

    . 参考界面 : 携程app首页的广告栏, 使用ViewPager实现        自制页面效果图 : 源码下载地址: http://download.csdn.net/detail/han1202 ...

  7. Android Studio 使用ViewPager + Fragment实现滑动菜单Tab效果 --简易版

    描述: 之前有做过一个记账本APP,拿来练手的,做的很简单,是用Eclipse开发的: 最近想把这个APP重新完善一下,添加了一些新的功能,并选用Android Studio来开发: APP已经完善了 ...

  8. Android中使用ViewPager制作广告栏效果 - 解决ViewPager占满全屏页面适配问题

    . 参考界面 : 携程app首页的广告栏, 使用ViewPager实现        自制页面效果图 : 源码下载地址: http://download.csdn.net/detail/han1202 ...

  9. Android中Activity加入Fragment使用注意事项及常用技巧

    Fragment中AlertDialog弹出窗口的使用 Fragment默认不具有Content的一些方法和属性,因此在Activity中可以使用的一些方法在Fragment中使用就需要一些小技巧了 ...

随机推荐

  1. HDU1171-Big Event in HDU

    描述: Nowadays, we all know that Computer College is the biggest department in HDU. But, maybe you don ...

  2. 射频识别技术漫谈(20)——RC系列射频接口芯片

    目前基于13.56MHz的射频识别技术主要有ISO14443A.ISO14443B.ISO15693和FELICA技术.针对13.56MHz的射频识别技术,NXP开发了一系列名字以RC(Radio C ...

  3. 射频识别技术漫谈(15)——Mifare1的安全性及7字节序列号M1卡

    Mifare1的安全性主要指卡中数据的安全性,要求卡中的数据不能被非法修改或窃听.数据的安全性主要使用加密技术来保证,加密技术有两个关键因素:加密算法和密钥.现代加密技术的一大特点是加密算法公开,如果 ...

  4. Structs 2

    1  redirect.redirectaction和chain 的区别 当使用type="redirectAction" 或type="redirect"提交 ...

  5. ios7毛玻璃效果实现

    首先看效果:       核心代码: //加模糊效果,image是图片,blur是模糊度 - (UIImage *)blurryImage:(UIImage *)image withBlurLevel ...

  6. FZU Problem 2169 shadow

    http://acm.fzu.edu.cn/problem.php?pid=2169 题目大意: S王国有N个城市,有N-1条道路.王都为编号1的城市.叛军驻扎在很多城市.除了王都外有K个城市有军队, ...

  7. HDU Computer Transformation1041 题解

    Problem Description A sequence consisting of one digit, the number 1 is initially written into a com ...

  8. 大数据时代之hadoop(五):hadoop 分布式计算框架(MapReduce)

    大数据时代之hadoop(一):hadoop安装 大数据时代之hadoop(二):hadoop脚本解析 大数据时代之hadoop(三):hadoop数据流(生命周期) 大数据时代之hadoop(四): ...

  9. document.execCommand()函数可用参数解析

    隐藏在暗处的方法-execCommand() 关键字: javascript document document.execCommand()方法可用来执行很多我们无法实现的操作. execComman ...

  10. CSS的position(位置)

    position: 位置,absolute绝对位置,相对于浏览器边界的位置:relative相对位置,相对于它本应该出现的位置.fixed:固定位置,它不会随着滚动. 设置好position之后,就可 ...