Android ExpandableRecyclerView使用方法详解
时间:2022-07-28
本文章向大家介绍Android ExpandableRecyclerView使用方法详解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文为大家分享了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地址
以上就是本文的全部内容,希望对大家的学习有所帮助。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- graph attention network(ICLR2018)官方代码详解(tensorflow)
- 在SAP Spartacus产品明细页面用outlet显示自定义数据
- 如何在SAP Spartacus自定义Component里消费数据
- 使用ConfigModule.withConfig替换SAP Spartacus标准Component
- pod 资源对象
- 在Java8的foreach()中使用return/break/continue
- JavaScript 覆盖对象字段级别
- Zabbix5.0 问题记录
- 「查缺补漏」巩固你的Nginx知识体系
- 超级帐本合约调用——fabric SDK Node调用TBaaS的合约
- TBaaS合约调用_fabric SDK Node 不使用Connection Profile
- helm安装、使用、实践
- 浅析asp .net core 中间件
- 玩转jenkins - 在自己的服务器上安装jenkins
- CPU有个禁区,内核权限也无法进入!