android 中的 ViewPager+ Fragment

android的Viewpager 的各類常常的用法,朋友問我要過,因此就稍微總結一下,android

ViewPager + Fragment 常常用到  代碼是從   actionbarsherlock 中提取出來的,這個效果都知道是 滑動來切換的。直接上代碼了web

在這裏簡單說明一下 FragmentStatePagerAdapter 和 FragmentPagerAdapteride

2個adapter 佈局

第一種 fragment狀態adapter -  在當前只會存在   前1個fragment  當前 fragment 和 下1個 fragment   其餘銷燬 ,適合加載多數據this

第二種 FragmentPagerAdapter  - 所有存在,因此不太適合加載 大量的數據 如圖片什麼的,很容易內存溢出。spa

工程結構:orm

 

1.    activity   adapter 在一塊兒 (static類型的 Fragment)xml

  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

相關文章
相關標籤/搜索