PagerAdapter是android.support.v4包中的类,它的子类有FragmentPagerAdapter, FragmentStatePagerAdapter,这两个adapter都是Fragment的适配器,用于实现Fragment的滑动效果,这两个adapter的使用和区别此次就先不介绍了,等下次有时间再作详细的介绍。android
PagerAdapter主要是viewpager的适配器,而viewPager则也是在android.support.v4扩展包中新添加的一个强大的控件,能够实现控件的滑动效果,好比我们在软件中常见的广告栏的滑动效果,用viewPager就能够实现。今天主要介绍如何使用viewPagr并重写PagerAdapter实现常见广告栏的滑动效果。缓存
首先,若是继承pageradapter,至少必须重写下面的四个方法ide
1 instantiateItem(ViewGroup, int) 返回对象代表了PagerAdapter适配器选择哪一个对象放在当前的ViewPager中
2. destroyItem(ViewGroup, int, Object) ViewGroup中移出当前View
3. getCount() 获取当前窗体界面数
4. isViewFromObject(View, Object) 用于判断是否由对象生成界面
下面咱们以代码的形式,说明这四个方法的含义以及如何使用spa
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()code