博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
打造RecyclerView的n级列表
阅读量:7073 次
发布时间:2019-06-28

本文共 3252 字,大约阅读时间需要 10 分钟。

先上效果图:

1.该多级列表的优势:

  1. 支持无限级列表展开
  2. 基于一个recyclerView实现
  3. 可以自定义每一级item的样式,定制化更强

2.设计的思路

  1. 数据结构List<ItemBean>,ItemBean类中有变量List<ItemBean>,构造整体RecyclerView的数据源
  2. 因为RecyclerView.Adapter本来就支持多个type的item布局,不清楚的可以看下getItemViewType这个方法,所以我们可以利用这个类,来区分不同级用不同的Item。
  3. 将Item必须具备的方法放在一个Tree接口里面,以后自定义的类只需要继承Tree接口就好了。

3.代码分析

public abstract class BaseTreeRVAdapter
extends BaseRVAdapterV2
{ @Override public void onBindViewHolder(T holder, final int position) { try { getLevel(position, mDatas, new PosBean()); } catch (StopMsgException ex) { int type = Integer.parseInt(ex.getMessage()); M tree = ex.getTree(); onBindViewHolder(type, tree, holder); } } @Override public int getItemViewType(int position) { try { getLevel(position, mDatas, new PosBean()); } catch (StopMsgException ex) { return Integer.parseInt(ex.getMessage()); } return 0; } @Override public int getItemCount() { return getTotal(mDatas); } protected abstract void onBindViewHolder(int type, M tree, T holder); public List
getDatas() { return mDatas; } public void setDatas(List
info) { if (info != null) { mDatas = info; } else { mDatas.clear(); } notifyDataSetChanged(); }}

注释1:主要是计算当前给的数据他的item个数,会根据是否展开的状态来统总个数

注释2:计算当前的postion对应的item层级,来显示对应的item布局

4.对于自己需要实现的地方

public class TreeListAdapter extends BaseTreeRVAdapter
{ @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view; RecyclerView.ViewHolder vh; switch (viewType) { case 0: ...... break; case 1: ...... break; case 2: ...... break; case 3: case 4: ...... } return vh; } @Override protected void onBindViewHolder(int type, final DiscountItem itemCategoryListBean, RecyclerView.ViewHolder holder) { switch (type) { case 0: ...... break; case 1: ...... break; case 2: ...... break; case 3: case 4: ...... } }}
  1. 上面的泛型T就是我们的Item的class类型,所以自定义的class要想用这个adapter的话,都需要实现Tree接口
  2. onBindViewHolder方法中形参的的type就是层级,比如说第一级type就是0,第二级是1,以此类推

5.另外自定义的类如果不需要extends的话,那么需要继承wellijohn.org.treerecyclerview.vo.TreeItem,如果已经写了的话,那么就需要自己实现Tree接口。

必须实现的几个方法:

int getLevel();//每个item的层级,比如一级就是0,二级就返回1,这里的0和1可以自己定义,后面就是根据这个来选择哪种样式的item    List
getChilds();//返回的子列表,比如当前类是一级的话,那么这个方法返回的是二级的列表数据 boolean isExpand();//是否展开,true展开,false不展开,一般就是点击下去修改这个值刷新adapter,就能达到展开还是折叠的目的了

6.引入方式

step 1.Add it in your root build.gradle at the end of repositories:    allprojects {        repositories {            ...            maven { url 'https://jitpack.io' }        }    }Step 2. Add the dependency    dependencies {            implementation 'com.github.WelliJohn:MultiLevelRecyclerView:0.0.1'    }

7.demo示例

,如果觉得有用,还请点个赞。

转载地址:http://zhkml.baihongyu.com/

你可能感兴趣的文章
redis 学习笔记(未完)
查看>>
线程组
查看>>
dell c6220安装系统--166
查看>>
python 字典多种方法删除 keys
查看>>
VIM使用系列:位置跳转和块模式
查看>>
数组资源
查看>>
【乡巴佬】在Word中合理排列文本框与文本
查看>>
maven 子项目 deploy 到私服
查看>>
等待实习的offer中的想法
查看>>
在Apache配置https方式访问网站
查看>>
线程开发之多线程之间的通讯实现
查看>>
全面分析 Spring 的编程式事务管理及声明式事务管理
查看>>
Leetcode——最长不重复子串
查看>>
myEclipse 中看jar源代码
查看>>
Linux awk 命令 说明
查看>>
shell之变量和引用
查看>>
两个基本概念 标称型数据和数值型数据
查看>>
MediaPlayer视频播放
查看>>
Android文本框实现搜索和清空效果
查看>>
Android的五种数据存储方式
查看>>