Android ExpandableRecyclerView使用方法详解
程序员文章站
2023-11-20 19:06:46
本文为大家分享了android expandablerecyclerview的使用,供大家参考,具体内容如下
1.目前只支持两级结构。
2.支持所有组同时...
本文为大家分享了android expandablerecyclerview的使用,供大家参考,具体内容如下
1.目前只支持两级结构。
2.支持所有组同时全部展开,支持同一时间只能展开一组。
3.groupview,childview高度自定义。
4.支持初始化数据时,指定展开某组数据。
5.支持groupitem,childitem的onlick,onlongclick事件。
6.展开收起带动画。
效果图:
使用步骤:加入依赖
compile 'com.drawthink:expandable-recyclerview:0.0.3'
1.继承baseviewholder,实现自己的viewholder
1.1 在构造函数中初始化你的view(包括groupview,和childview).
1.2 分别实现以下两个方法,并在对应方法中返回对应layout布局文件中根节点的id。
public int getgroupviewresid() public int getchildviewresid()
示例代码:
public class imageviewholder extends baseviewholder { public imageview image; public textview tvtitle; /** * 初始化你的view(这里包括groupview,和childview) */ public imageviewholder(context ctx, view itemview, int viewtype) { super(ctx,itemview, viewtype); image = (imageview) itemview.findviewbyid(r.id.iv_image); tvtitle = (textview)itemview.findviewbyid(r.id.tv_title); } /** * @return 返回你的groupview 布局文件中根节点的id */ @override public int getgroupviewresid() { return r.id.group; } /** * @return 返回你的childview 布局文件中根节点的id */ @override public int getchildviewresid() { return r.id.child; } }2.继承baserecyclerviewadapter
/** * author:drawthink * describe: * date: 2017/5/22 * t :group data * s :child data * vh :viewholder */ public abstract class baserecyclerviewadapter<t,s,vh extends baseviewholder> extends recyclerview.adapter<vh>
示例adapter代码:
public class imageadapter extends baserecyclerviewadapter<string,imagebean,imageviewholder> { private context ctx; private list datas; private layoutinflater minflater; public imageadapter(context ctx, list<recyclerviewdata> datas) { super(ctx, datas); minflater = layoutinflater.from(ctx); this.ctx = ctx; this.datas = datas; } @override public void onbindgroupholder(imageviewholder holder, int grouppos,int position, string groupdata) { holder.tvtitle.settext(groupdata); } @override public void onbindchildpholder(imageviewholder holder, int grouppos,int childpos,int position, imagebean childdata) { holder.image.setbackgroundresource(childdata.getresid()); } @override public view getgroupview(viewgroup parent) { return minflater.inflate(r.layout.title_item_layout,parent,false); } @override public view getchildview(viewgroup parent) { return minflater.inflate(r.layout.item_image_layout,parent,false); } @override public imageviewholder createrealviewholder(context ctx, view view, int viewtype) { return new imageviewholder(ctx,view,viewtype); } }
完成以上两步之后,基本大工告成,由于expandablerecyclerview的数据是要分组的,所以提供了recyclerviewdata来封装
/** * @param groupdata * @param childdatas * @param isexpand 初始化展示数据时,该组数据是否展开 */ public recyclerviewdata(t groupdata, list<s> childdatas,boolean isexpand)
那接下来看下数据具体是怎样封装的。
mdatas = new arraylist<>(); list<imagebean> bean1 = new arraylist<>(); list<imagebean> bean2 = new arraylist<>(); list<imagebean> bean3 = new arraylist<>(); // 每个子列表长度可以不相同 bean1.add(new imagebean("dog", r.mipmap.dog)); bean1.add(new imagebean("dog", r.mipmap.dog)); bean2.add(new imagebean("cat", r.mipmap.cat)); bean3.add(new imagebean("bird", r.mipmap.bird)); mdatas.add(new recyclerviewdata("dog", bean1, true)); mdatas.add(new recyclerviewdata("cat", bean2, true)); mdatas.add(new recyclerviewdata("bird", bean3, true));
所有工作以完成,现在你可以象平常使用adapter,recyclerview一样,来愉快的写代码了。
注意:在对元数据mdatas进行增删操作时,要调用adapter.notifyrecyclerviewdata();否则会造成数据索引错乱的问题。
代码github地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 分析微博营销案例 看看他是如何成功的