Android ExpandableRecyclerView使用方法详解

发布时间 - 2026-01-11 02:43:07    点击率:

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

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


# Android  # ExpandableRecyclerView  # Android RecyclerView设置下拉刷新的实现方法  # Android中RecyclerView拖拽、侧删功能的实现代码  # Android RecyclerView 实现快速滚动的示例代码  # Android中RecyclerView实现Item添加和删除的代码示例  # Android用RecyclerView实现动态添加本地图片  # Android 中RecyclerView顶部刷新实现详解  # 自己的  # 你可以  # 并在  # 是怎样  # 自定义  # 在对  # 大家分享  # 两步  # 则会  # 两级  # 具体内容  # 大家多多  # 大工告成  # getChildViewResId  # getGroupViewResId  # ImageViewHolder  # Layout  # TextView  # extends  # childView 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何集成Inertia.js与Vue/React?(安装配置)  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  使用C语言编写圣诞表白程序  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  网站图片在线制作软件,怎么在图片上做链接?  活动邀请函制作网站有哪些,活动邀请函文案?  javascript日期怎么处理_如何格式化输出  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  如何快速生成可下载的建站源码工具?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  北京专业网站制作设计师招聘,北京白云观官方网站?  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  如何为不同团队 ID 动态生成多个“认领值班”按钮  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  如何在Windows服务器上快速搭建网站?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  Android使用GridView实现日历的简单功能  如何快速搭建高效服务器建站系统?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  如何在阿里云高效完成企业建站全流程?  Linux安全能力提升路径_长期防护思维说明【指导】  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何正确选择百度移动适配建站域名?  如何用腾讯建站主机快速创建免费网站?  大连网站制作公司哪家好一点,大连买房网站哪个好?  javascript中的try catch异常捕获机制用法分析  如何在腾讯云服务器上快速搭建个人网站?  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  iOS正则表达式验证手机号、邮箱、身份证号等  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  如何破解联通资金短缺导致的基站建设难题?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  php485函数参数是什么意思_php485各参数详细说明【介绍】  教你用AI润色文章,让你的文字表达更专业  新三国志曹操传主线渭水交兵攻略  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何用IIS7快速搭建并优化网站站点?