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)
下面我们以代码的形式,说明这四个方法的含义以及如何使用
privateclassViewPagerAdapterextendsPagerAdapter{ //获取要滑动的控件的数量,在这里我们以滑动的广告栏为例,那么这里就应该是展示的广告图片的ImageView数量 @Override publicintgetCount(){ returnimages.size(); } //来判断显示的是否是同一张图片,这里我们将两个参数相比较返回即可 @Override publicbooleanisViewFromObject(Viewarg0,Objectarg1){ returnarg0==arg1; } //PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁 @Override publicvoiddestroyItem(ViewGroupview,intposition,Objectobject){ view.removeView(images.get(position)); } //当要显示的图片可以进行缓存的时候,会调用这个方法进行显示图片的初始化,我们将要显示的ImageView加入到ViewGroup中,然后作为返回值返回即可 @Override publicObjectinstantiateItem(ViewGroupview,intposition){ view.addView(images.get(position)); returnimages.get(position); } }
实现了这四个方法,就可以实现滑动的效果了。
android仿Adapter实现自定义PagerAdapter
最近在开发中,为增加PagerAdapter的可用性与可读性,自定义了一下PagerAdapter
publicabstractclassEjBasePagerAdapterextendsPagerAdapter{ protectedList list; protectedSparseArray >sparseArray; publicEjBasePagerAdapter(List list){ this.list=list; sparseArray=newSparseArray<>(); } @Override publicintgetCount(){ returnlist.size(); } publicStringgetIcon(intposition){ returnnull; } @Override publicObjectinstantiateItem(ViewGroupcontainer,intposition){ EjBasePagerHolder 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); } Viewview=holder.itemView; container.addView(view); returnview; } @Override publicvoidnotifyDataSetChanged(){ sparseArray.clear(); super.notifyDataSetChanged(); } protectedintgetSparsePosition(intposition){ return(position+10)*2; } @Override publicvoiddestroyItem(ViewGroupcontainer,intposition,Objectobject){ container.removeView((View)object); } protectedViewinflate(intresorce,ViewGroupviewGroup){ returnLayoutInflater.from(viewGroup.getContext()).inflate(resorce,viewGroup,false); } @Override publicbooleanisViewFromObject(Viewview,Objectobject){ returnview==object; } protectedabstractEjBasePagerHolder onBundHolder(ViewGroupcontainer); publicvoidonDestroy(){ } publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata){ } protectedabstractclassEjBasePagerHolder { /**上下文*/ protectedContextmContext; privateintposition; SparseArray sparseArray; ViewitemView; protectedEjBasePagerHolder(ViewitemView){ this.itemView=itemView; this.mContext=itemView.getContext(); sparseArray=newSparseArray<>(); initView(); } publicabstractvoidinitView(); publicViewfindViewById(intid){ Viewview=sparseArray.get(id); if(null==view){ view=itemView.findViewById(id); sparseArray.append(id,view); } returnview; } publicabstractvoidbindDada(Dt,intposition); publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata){ } publicvoidsetPosition(intposition){ this.position=position; } publicintgetPosition(){ returnposition; } publicvoidonDestroy(){ sparseArray.clear(); } } }
简单用法
publicclassEjMainFmtBannerPagerAdapterextendsEjBasePagerAdapter{ publicEjMainFmtBannerPagerAdapter(List list){ super(list); } @Override protectedEjBasePagerHolder onBundHolder(ViewGroupcontainer){ returnnewEjBasePagerHolder (LayoutInflater.from(container.getContext()).inflate(R.layout.ejmain_item_fmt_banner,null)){ privateImageViewejmain_iv_banner; @Override publicvoidinitView(){ ejmain_iv_banner=(ImageView)findViewById(R.id.ejmain_iv_banner); } @Override publicvoidbindDada(EjMainFragmentDataBeant,intposition){ GlidUtil.loadUrl(t.img1,ejmain_iv_banner,mContext); } }; } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。