当前位置: 首页 > 编程笔记 >

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

琴刚豪
2023-03-14
本文向大家介绍android仿Adapter实现自定义PagerAdapter方法示例,包括了android仿Adapter实现自定义PagerAdapter方法示例的使用技巧和注意事项,需要的朋友参考一下

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

总结

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

 类似资料:
  • 本文向大家介绍Android ListView自定义Adapter实现仿QQ界面,包括了Android ListView自定义Adapter实现仿QQ界面的使用技巧和注意事项,需要的朋友参考一下 PS:listview中有一些简单使用的适配器,如:SimpleAdapter:构造方法SimpleAdapter(Context context,List<Map<String,?>> data,reS

  • 本文向大家介绍Android仿360悬浮小球自定义view实现示例,包括了Android仿360悬浮小球自定义view实现示例的使用技巧和注意事项,需要的朋友参考一下 Android仿360悬浮小球自定义view实现示例 效果图如下: 实现当前这种类似的效果 和360小球 悬浮桌面差不错类似。这种效果是如何实现的呢。废话不多说 ,直接上代码。 1.新建工程,添加悬浮窗权限。 2.自定义一个Floa

  • 本文向大家介绍Android仿IOS自定义AlertDialog提示框,包括了Android仿IOS自定义AlertDialog提示框的使用技巧和注意事项,需要的朋友参考一下 本文介绍的仿IOS对话框的实现,先来看一下效果图 具体代码如下: 布局文件view_alertdialog.xml alertdialog_left_selector.xml alertdialog_right_select

  • 本文向大家介绍Android自定义dialog简单实现方法,包括了Android自定义dialog简单实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android自定义dialog简单实现方法。分享给大家供大家参考,具体如下: 更多关于Android开发相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》 希望本文所述对大家Android程序设计有所帮助。

  • 我读到了Crudrepository,这是一个接口,用于在特定类型的存储库上进行通用CRUD操作。 但是我们可以创建我们的自定义接口并扩展CrudRepository。

  • 本文向大家介绍Android编程实现自定义Dialog的大小自动控制方法示例,包括了Android编程实现自定义Dialog的大小自动控制方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程实现自定义Dialog的大小自动控制方法。分享给大家供大家参考,具体如下: Android应用开发中,无论是出于功能还是增加用户体验,弹出对话框(Dialog)进行一些操作提示是非