zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    分享一个单例模型类Singleton代码
    异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache...等失效的问题)
    httpwebrequest 用GET方法时报无法发送具有此谓词类型的内容正文
    Oracle 存储过程的导出导入序列的导出
    通用后台模版的实现
    java流类基础练习。
    java流。基础
    java流类、、、理解不够,流太多不知怎么用好?
    java代码流类。。程序怎么跟书上的结果不一样???
    java代码流类
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4505286.html
Copyright © 2011-2022 走看看