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. spark学习

    大数据学习纲要,主要针对spark的相关知识的学习,后续会涉及其他大数据相关框架及语言. 1 spark入门: 2.spark 实战部分 3.spark源码解析

  2. 寻找数列中第k大的数算法分析

    问题描述:给定一系列数{a1,a2,...,an},这些数无序的,现在求第k大的数. 看到这个问题,首先想到的是先排序,然后直接输出第k大的数,于是得到啦基于排序的算法 算法一: #include&l ...

  3. 采用translate实现垂直水平居中

    今天分享一个利用css3新特性实现垂直水平居中的方法. 通过对元素进行绝对定位再配合transform中的translate实现. 代码如下: html <div id="conten ...

  4. Symfony框架系列----1.入门安装

    一.安装    (1)Composer安装(可选) $ curl -s https://getcomposer.org/installer | php $ php composer.phar crea ...

  5. C#数据库——用多线程来组合一个SQL语句

    StringBuffer sql = new StringBuffer();或(StringBuilder sql = new StringBuilder ()) sql.Append("s ...

  6. 射频识别技术漫谈(23)——ISO15693的载波、调制与编码

    射频识别技术中的通讯大多是主从式,主动方一般是读写器,被动方称为“卡片”或“标签”.到底是叫“卡片”还是“标签”,好像也没有严格的区分.习惯上可以从以下4个方面界定:一是形状,卡片通常体积较大,更像“ ...

  7. 用Jetty和redis实现接入服务器adapter

    传统的服务器端为若干个客户端提供服务,一般需要开启多个服务器端进程.为了进一步提升服务器端的处理能力,可以如下图所示将服务解耦为两部分(adapter与workers),它们之间通过消息队列传输数据, ...

  8. [python网络编程]DNSserver

    在上一篇中,使用scrapy改动源IP发送请求的最后我们提到因为hosts文件不支持正则,会导致我们的随机域名DNS查询失败. 使用DNS代理服务器能够解决问题, 以下是我用gevent写的小工具.非 ...

  9. 经典排序算法及python实现

    今天我们来谈谈几种经典排序算法,然后用python来实现,最后通过数据来比较几个算法时间 选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据 ...

  10. MySql 小问题集合

    - 使用MySql通过SpringFramework来自动建表, 服务器用的是Tomcat, 在server.xml和context.xml中均正确配置了jdbc datasource. 编译通过, ...