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)
2. destroyItem(ViewGroup, int, Object)
3. getCount()
4. isViewFromObject(View, Object)
下面我们以代码的形式,说明这四个方法的含义以及如何使用
private class ViewPagerAdapter extends PagerAdapter { 
 
    // 获取要滑动的控件的数量,在这里我们以滑动的广告栏为例,那么这里就应该是展示的广告图片的ImageView数量 
    @Override 
    public int getCount() { 
      return images.size(); 
    } 
 
    // 来判断显示的是否是同一张图片,这里我们将两个参数相比较返回即可 
    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
      return arg0 == arg1; 
    } 
 
    // PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁 
    @Override 
    public void destroyItem(ViewGroup view, int position, Object object) { 
      view.removeView(images.get(position)); 
    } 
 
    // 当要显示的图片可以进行缓存的时候,会调用这个方法进行显示图片的初始化,我们将要显示的ImageView加入到ViewGroup中,然后作为返回值返回即可 
    @Override 
    public Object instantiateItem(ViewGroup view, int position) { 
      view.addView(images.get(position)); 
      return images.get(position); 
    } 
  } 
实现了这四个方法,就可以实现滑动的效果了。
android仿Adapter实现自定义PagerAdapter
最近在开发中,为增加PagerAdapter的可用性与可读性,自定义了一下PagerAdapter
public abstract class EjBasePagerAdapter<T> extends PagerAdapter {
 protected List<T> list;
 protected SparseArray<EjBasePagerHolder<T>> sparseArray;
 public EjBasePagerAdapter(List<T> list){
  this.list = list;
  sparseArray = new SparseArray<>();
 }
 @Override
 public int getCount() {
  return list.size();
 }
 public String getIcon(int position){
  return null;
 }
 @Override
 public Object instantiateItem(ViewGroup container, int position) {
  EjBasePagerHolder<T> holder = sparseArray.get(getSparsePosition(position));
  if(null == holder){
   holder = onBundHolder(container);
   holder.setPosition(position);
   holder.bindDada(list.get(position),position);
   sparseArray.put(getSparsePosition(position),holder);
  }
  View view = holder.itemView;
  container.addView(view);
  return view;
 }
 @Override
 public void notifyDataSetChanged() {
  sparseArray.clear();
  super.notifyDataSetChanged();
 }
 protected int getSparsePosition(int position){
  return (position+10)*2;
 }
 @Override
 public void destroyItem(ViewGroup container, int position, Object object) {
  container.removeView((View) object);
 }
 protected View inflate(int resorce, ViewGroup viewGroup) {
  return LayoutInflater.from(viewGroup.getContext()).inflate(resorce, viewGroup, false);
 }
 @Override
 public boolean isViewFromObject(View view, Object object) {
  return view == object;
 }
 protected abstract EjBasePagerHolder<T> onBundHolder(ViewGroup container);
 public void onDestroy(){
 }
 public void onActivityResult(int requestCode, int resultCode, Intent data) {
 }
 protected abstract class EjBasePagerHolder<D>{
  /**上下文*/
  protected Context mContext;
  private int position;
  SparseArray<View> sparseArray;
  View itemView;
  protected EjBasePagerHolder(View itemView){
   this.itemView = itemView;
   this.mContext = itemView.getContext();
   sparseArray = new SparseArray<>();
   initView();
  }
  public abstract void initView();
  public View findViewById(int id){
   View view = sparseArray.get(id);
   if(null == view){
    view = itemView.findViewById(id);
    sparseArray.append(id,view);
   }
   return view;
  }
  public abstract void bindDada(D t,int position);
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
  }
  public void setPosition(int position) {
   this.position = position;
  }
  public int getPosition() {
   return position;
  }
  public void onDestroy(){
   sparseArray.clear();
  }
 }
}
简单用法
public class EjMainFmtBannerPagerAdapter extends EjBasePagerAdapter<EjMainFragmentDataBean>{
 public EjMainFmtBannerPagerAdapter(List<EjMainFragmentDataBean> list) {
  super(list);
 }
 @Override
 protected EjBasePagerHolder<EjMainFragmentDataBean> onBundHolder(ViewGroup container) {
  return new EjBasePagerHolder<EjMainFragmentDataBean>(LayoutInflater.from(container.getContext()).inflate(R.layout.ejmain_item_fmt_banner,null)) {
   private ImageView ejmain_iv_banner;
   @Override
   public void initView() {
    ejmain_iv_banner = (ImageView)findViewById(R.id.ejmain_iv_banner);
   }
   @Override
   public void bindDada(EjMainFragmentDataBean t, int position) {
    GlidUtil.loadUrl(t.img1,ejmain_iv_banner,mContext);
   }
  };
 }
}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对呐喊教程的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎点击右下角反馈进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。