当前位置: 移动技术网 > IT编程>移动开发>Android > Android ExpandableRecyclerView使用方法详解

Android ExpandableRecyclerView使用方法详解

2019年07月24日  | 移动技术网IT编程  | 我要评论

积累本,死神h小游戏,嘉峪关市人民政府网

 本文为大家分享了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地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网