首页 > 系统 > Android > 正文

详解Android ExpandableRecyclerView的使用方法

2020-02-21 17:26:12
字体:
来源:转载
供稿:网友

Android有很多可伸缩的recyclerview的第三方开源项目,其实在参考了github上的类似项目之后,我们发现存在许多问题和bug,下面跟着武林技术频道小编的步伐详解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的使用方法,更多的编程知识武林技术频道也介绍了很多。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表