首页 > 系统 > Android > 正文

android仿Adapter实现自定义PagerAdapter方法示例

2019-10-22 18:23:05
字体:
来源:转载
供稿:网友

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);   }  }; }}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对VEVB武林网的支持。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表