芙蓉花,快乐大本营 林依晨,蜜糖宝贝无爱承欢
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 Manifest中meta-data扩展元素数据的配置与获取方式
Android实现获取meta-data和build.gradle的值
Android获取清单文件中的meta-data,解决碰到数值为null的问题
解决webview 第二次调用loadUrl页面不刷新的问题
解决Android WebView拦截url,视频播放加载失败的问题
Android webview加载https链接错误或无响应的解决
网友评论