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地址

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

(0)

相关推荐

  • Android 中RecyclerView顶部刷新实现详解

    Android 中RecyclerView顶部刷新实现详解 1. RecyclerView顶部刷新的原理 RecyclerView顶部刷新的实现通常都是在RecyclerView外部再包裹一层布局.在这个外层布局中,还包含一个自定义的View,作为顶部刷新时的指示View.也就是说,外层布局中包含两个child,一个顶部刷新View,一个RecyclerView,顶部刷新View默认是隐藏不可见的.在外层布局中对滑动事件进行处理,当RecyclerView滑动到顶部并继续下滑的时候,根据滑动的距

  • Android RecyclerView设置下拉刷新的实现方法

    Android RecyclerView设置下拉刷新的实现方法 1 集成 SwipeRefreshLayout 1.1 xml布局文件中使用 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/refresh" android:layout_width = "match_parent" android:layout_height = "match_parent" &g

  • Android用RecyclerView实现动态添加本地图片

    本文介绍了Android用RecyclerView实现动态添加本地图片,分享给大家,具体如下: 本文所用的多图选择的library来自:https://github.com/lovetuzitong/MultiImageSelector 简单介绍一下用法: 1.跳转到图片选择页面: Intent intent = new Intent(PassengerSetActivity.this, MultiImageSelectorActivity.class); intent.putExtra(Mul

  • Android中RecyclerView实现Item添加和删除的代码示例

    本文介绍了Android中RecyclerView实现Item添加和删除的代码示例,分享给大家,具体如下: 先上效果图: RecyclerView简介: RecyclerView用以下两种方式简化了数据的展示和处理: 1. 使用LayoutManager来确定每一个item的排列方式. 2. 为增加和删除项目提供默认的动画效果,也可以自定义. RecyclerView项目结构如下: Adapter:使用RecyclerView之前,你需要一个继承自RecyclerView.Adapter的适配器

  • Android中RecyclerView拖拽、侧删功能的实现代码

    废话不多说,下面展示一下效果. 这是GridView主文件实现. public class GridViewActivity extends AppCompatActivity { RecyclerView mRecyclerView; List<String> mStringList; RecyclerAdapter mRecyAdapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { s

  • Android RecyclerView 实现快速滚动的示例代码

    简评:Android Support Library 26 中终于实现了一个等待已久的功能: RecyclerView 的快速滚动 . Android 官方早就在建议开发者使用 RecyclerView 替代 ListView,RecyclerView 也确实表现要好于 ListView,除了没有快速滚动,就像下面这样: 因此,之前要想在 RecyclerView 上实现快速滚动,往往是依赖第三方库,比如:FutureMind/recycler-fast-scroll或 timusus/Recy

  • Android ExpandableRecyclerView使用方法详解

    本文为大家分享了Android ExpandableRecyclerView的使用,供大家参考,具体内容如下 1.目前只支持两级结构. 2.支持所有组同时全部展开,支持同一时间只能展开一组. 3.GroupView,ChildView高度自定义. 4.支持初始化数据时,指定展开某组数据. 5.支持GroupItem,ChildItem的Onlick,OnLongClick事件. 6.展开收起带动画. 效果图: 使用步骤:加入依赖 compile 'com.drawthink:expandable

  • Android HandlerThread使用方法详解

    Android HandlerThread使用方法详解 HandlerThread 继承自Thread,内部封装了Looper. 首先Handler和HandlerThread的主要区别是:Handler与Activity在同一个线程中,HandlerThread与Activity不在同一个线程,而是别外新的线程中(Handler中不能做耗时的操作). 用法: import android.app.Activity; import android.os.Bundle; import androi

  • Android canvas drawBitmap方法详解及实例

     Android canvas drawBitmap方法详解及实例 之前自己在自定义view,用到canvas.drawBitmap(Bitmap, SrcRect, DesRect, Paint)的时候,对其中的第2和3个参数的含义含糊不清.看源码函数也没理解,然后看了一些其他的博客加上自己的理解,整理如下.首先,我们看一张图片,今天就要绘制这张图片. 然后将图片用红色的线条分成4个部分,如下: 我们自定义一个View,代码如下: public class PoterDuffLoadingVi

  • Android View.onMeasure方法详解及实例

    Android View.onMeasure方法详解及实例 View在屏幕上显示出来要先经过measure(计算)和layout(布局). 1.什么时候调用onMeasure方法? 当控件的父元素正要放置该控件时调用.父元素会问子控件一个问题,"你想要用多大地方啊?",然后传入两个参数--widthMeasureSpec和heightMeasureSpec. 这两个参数指明控件可获得的空间以及关于这个空间描述的元数据. 更好的方法是你传递View的高度和宽度到setMeasuredDi

  • Android Notification 使用方法详解

    Android Notification 使用方法详解 用TaskStackBuilder来获取PendingIntent处理点击跳转到别的Activity,首先是用一般的PendingIntent来进行跳转. mBuilder = new NotificationCompat.Builder(this).setContent(view) .setSmallIcon(R.drawable.icon).setTicker("新资讯") .setWhen(System.currentTim

  • 基于Android RxCache使用方法详解

    前言 我为什么使用这个库? 事实上Android开发中缓存功能的实现选择有很多种,File缓存,SP缓存,或者数据库缓存,当然还有一些简单的库/工具类,比如github上的这个: [ASimpleCache]:a simple cache for android and java 但是都不是很好用(虽然可能学习成本比较低,因为它使用起来相对简单),我可能需要很多的静态常量来作为key存储缓存数据value,并设置缓存的有效期,这可能需要很多Java代码去实现,并且过程繁琐. 如果您使用的网络请求

  • Android IdleHandler使用方法详解

    正文 在Android中,Handler是一个使用的非常频繁的东西,输入事件机制和系统状态,都通过Handler来进行流转,而在Handler中,有一个很少被人提起但是却很有用的东西,那就是IdleHandler,它的源码如下. /** * Callback interface for discovering when a thread is going to block * waiting for more messages. */ public static interface IdleHa

  • Android Notification使用方法详解

    Android  Notification使用详解 Notification 核心代码(链式调用):适用于Android 4.0以上(不兼容低版本) Notification noti = new Notification.Builder(this) .setContentTitle("标题名称") .setContentText("标题里的内容") .setSmallIcon(R.drawable.new_mail) .setLargeIcon(BitmapFac

  • Android  Notification使用方法详解

    Android  Notification使用详解 Notification 核心代码(链式调用):适用于Android 4.0以上(不兼容低版本) Notification noti = new Notification.Builder(this) .setContentTitle("标题名称") .setContentText("标题里的内容") .setSmallIcon(R.drawable.new_mail) .setLargeIcon(BitmapFac

  • Android RecyclerView使用方法详解

    本文为大家分享了Android RecyclerView使用方法,供大家参考,具体内容如下 1.RecyclerView 是在Android support - v7 里面提供的 新的列表组件,用来替代传统的ListView. . 要使用RecyclerView 需要给我工程添加 support:recycle-v7 的支持: app 右键 - Open Module Settings - Dependencies(依赖项) - 点 + 号 - 添加一个库 upport:recycle-v7 

随机推荐