RecyclerView Adapter辅助类详解及示例代码
程序员文章站
2024-03-07 09:37:08
是什么
baserecyclerviewadapterhelper是一个强大并且灵活的recyclerviewadapter
能做什么
可以大量减少你adap...
是什么
baserecyclerviewadapterhelper是一个强大并且灵活的recyclerviewadapter
能做什么
- 可以大量减少你adapter写的代码(和正常的adapter相比至少三分之二的)
- 可以添加点击事件
- 可以很轻松的添加recyclerview加载动画
- 添加头部、添加尾部
- 支持下拉刷新、上拉加载更多
- 支持分组
- 支持自定义item类型
- 支持setemptyview
- 支持子布局多个控件的点击事件
效果图
配置使用
在 build.gradle 的 repositories 添加:
allprojects { repositories { maven { url "https://jitpack.io" } } }
然后增加dependencies
dependencies { compile 'com.github.cymchad:baserecyclerviewadapterhelper:v1.5.8' }
创建adapter
public class quickadapter extends basequickadapter<status> { public quickadapter(context context) { super(context, r.layout.tweet, dataserver.getsampledata()); } @override protected void convert(baseviewholder helper, status item) { helper.settext(r.id.tweetname, item.getusername()) .settext(r.id.tweettext, item.gettext()) .settext(r.id.tweetdate, item.getcreatedat()) .setimageurl(r.id.tweetavatar, item.getuseravatar()) .setvisible(r.id.tweetrt, item.isretweet()) .linkify(r.id.tweettext); } }
添加item点击事件
mquickadapter.setonrecyclerviewitemclicklistener(new basequickadapter.onrecyclerviewitemclicklistener() { @override public void onitemclick(view view, int position) { } });
添加动画
// 一行代码搞定(默认为渐显效果) quickadapter.openloadanimation();
另外也可以制定其他的动画效果
// 默认提供5种方法(渐显、缩放、从下到上,从左到右、从右到左) // alphain, scalein, slidein_bottom, slidein_left, slidein_right quickadapter.openloadanimation(basequickadapter.alphain);
另外,如果内置的动画效果不满意,也可易自定义
// 自定义动画如此轻松 quickadapter.openloadanimation(new baseanimation() { @override public animator[] getanimators(view view) { return new animator[]{ objectanimator.offloat(view, "scaley", 1, 1.1f, 1), objectanimator.offloat(view, "scalex", 1, 1.1f, 1) }; } });
添加多种类型item
public class multipleitemquickadapter extends basemultiitemquickadapter<multipleitem> { public multipleitemquickadapter(context context, list data) { super(context, data); additmetype(multipleitem.text, r.layout.text_view); additmetype(multipleitem.img, r.layout.image_view); } @override protected void convert(baseviewholder helper, multipleitem item) { switch (helper.getitemviewtype()) { case multipleitem.text: helper.setimageurl(r.id.tv, item.getcontent()); break; case multipleitem.img: helper.setimageurl(r.id.iv, item.getcontent()); break; } } }
添加头部及底部
mquickadapter.addheaderview(getview());
mquickadapter.addfooterview(getview());
加载更多
mquickadapter.setonloadmorelistener(page_size, new basequickadapter.requestloadmorelistener() { @override public void onloadmorerequested() { if (mcurrentcounter >= total_counter) { mrecyclerview.post(new runnable() { @override public void run() { mquickadapter.isnextload(false); } }); } else { // reqdata mcurrentcounter = mquickadapter.getitemcount(); mquickadapter.isnextload(true); } } });
使用分组
public class sectionadapter extends basesectionquickadapter<mysection> { public sectionadapter(context context, int layoutresid, int sectionheadresid, list data) { super(context, layoutresid, sectionheadresid, data); } @override protected void convert(baseviewholder helper, mysection item) { helper.setimageurl(r.id.iv, (string) item.t); } @override protected void converthead(baseviewholder helper,final mysection item) { helper.settext(r.id.header, item.header); if(!item.ismroe)helper.setvisible(r.id.more,false); else helper.setonclicklistener(r.id.more, new view.onclicklistener() { @override public void onclick(view v) { toast.maketext(context,item.header+"more..",toast.length_long).show(); } }); }
使用setemptyview
mquickadapter.setemptyview(getview());
添加子布局多个控件的点击事件
adapter
protected void convert(baseviewholder helper, status item) { helper.setonclicklistener(r.id.tweetavatar, new onitemchildclicklistener()) .setonclicklistener(r.id.tweetname, new onitemchildclicklistener()); }
activity
mquickadapter.setonrecyclerviewitemchildclicklistener(new basequickadapter.onrecyclerviewitemchildclicklistener() { @override public void onitemchildclick(basequickadapter adapter, view view, int position) { string content = null; status status = (status) adapter.getitem(position); switch (view.getid()) { case r.id.tweetavatar: content = "img:" + status.getuseravatar(); break; case r.id.tweetname: content = "name:" + status.getusername(); break; } toast.maketext(animationuseactivity.this, content, toast.length_long).show(); } });
以上就是对recyclerview adapter的资料整理,后续继续添加相关文章,谢谢大家对本站的支持!
下一篇: java 在观察者模式中使用泛型T的实例