android 中的 ViewPager+ Fragment

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



 

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

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


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

 

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

 

posted @ 2013-11-13 08:16  安卓吧  阅读(60663)  评论(6编辑  收藏  举报