当前位置: 移动技术网 > IT编程>移动开发>Android > android仿Adapter实现自定义PagerAdapter方法示例

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

芙蓉花,快乐大本营 林依晨,蜜糖宝贝无爱承欢

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

总结

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网