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快速搭建并优化网站站点?

