PagerAdapter 簡介 PagerAdapter是android.support.v4包中的類,它的子類有FragmentPagerAdapter, FragmentStatePagerAdapter,這兩個adapter都是Fragment的適配器,用於實現Fragment的滑動效果,這兩 ...
PagerAdapter 簡介
PagerAdapter是android.support.v4包中的類,它的子類有FragmentPagerAdapter, FragmentStatePagerAdapter,這兩個adapter都是Fragment的適配器,用於實現Fragment的滑動效果,這兩個adapter的使用和區別這次就先不介紹了,等下次有時間再做詳細的介紹。
PagerAdapter主要是viewpager的適配器,而viewPager則也是在android.support.v4擴展包中新添加的一個強大的控制項,可以實現控制項的滑動效果,比如咱們在軟體中常見的廣告欄的滑動效果,用viewPager就可以實現。今天主要介紹如何使用viewPagr並重寫PagerAdapter實現常見廣告欄的滑動效果。
PagerAdapter用法簡介
首先,如果繼承pageradapter,至少必須重寫下麵的四個方法
1 instantiateItem(ViewGroup, int) 返回對象表明瞭PagerAdapter適配器選擇哪個對象放在當前的ViewPager中
2. destroyItem(ViewGroup, int, Object) ViewGroup中移出當前View
3. getCount() 獲取當前窗體界面數
4. isViewFromObject(View, Object) 用於判斷是否由對象生成界面
下麵我們以代碼的形式,說明這四個方法的含義以及如何使用
1 private class ViewPagerAdapter extends PagerAdapter { 2 // 獲取要滑動的控制項的數量,在這裡我們以滑動的廣告欄為例,那麼這裡就應該是展示的廣告圖片的ImageView數量 3 @Override 4 public int getCount() { 5 return 0; 6 } 7 8 // 來判斷顯示的是否是同一張圖片,這裡我們將兩個參數相比較返回即可 9 @Override 10 public boolean isViewFromObject(View arg0, Object arg1) { 11 return arg0 == arg1; 12 } 13 14 // PagerAdapter只緩存三張要顯示的圖片,如果滑動的圖片超出了緩存的範圍,就會調用這個方法,將圖片銷毀 15 @Override 16 public void destroyItem(ViewGroup view, int position, Object object) { 17 } 18 19 // 當要顯示的圖片可以進行緩存的時候,會調用這個方法進行顯示圖片的初始化,我們將要顯示的ImageView加入到ViewGroup中,然後作為返回值返回即可 20 public Object instantiateItem(ViewGroup container, int position) { 21 return container; 22 } 23 24 public int getItemPosition(Object object) { 25 View view = (View)object; 26 int currentPage = ((PhotoPageActivity)context).getCurrentPagerIdx(); // Get current page index 27 if(currentPage == (Integer)view.getTag()){ 28 return POSITION_NONE; 29 }else{ 30 return POSITION_UNCHANGED; 31 } 32 } 33 } 34 // Get current page index 35 pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 36 37 @Override 38 public void onPageSelected(int position) { 39 currentItem = position; 40 } 41 42 @Override 43 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 44 } 45 46 @Override 47 public void onPageScrollStateChanged(int state) { 48 } 49 }); 50 // Return current index to Adapter 51 public int getCurrentPagerIdx() { 52 return currentItem; 53 }
如果想要刷新 直接調用notifyDataSetChanged()