先看下效果
现在很多文章都是rv嵌套rv ,层级多了肯定会卡。我这个只使用了一个recyclerview,先说下思路。
1,我们先看看多层级的json一般是什么结构的,举个栗子,行政区结构是最常见
这个可以无限级,如果用rv嵌套你都不知道要嵌套多少个rv,社区后面还可以有街道,道路,小区,楼栋,几层,几号房等等
这是我项目里面的数据
2,现在我们要考虑的是怎么使用一个rv能实现多层级的列表;我们平时使用rv做列表的时候是不是只有一个同级的数据,那么我们就先实现一个同级的列表。我们的折叠树是一层一层的展开的,我们先实现最外层的列表,实现一层我就不说了
一级是这个样子的,我使用的是项目里面的json数据 ,改了下名字,就没使用行政区
3,在是实现下一步之前还有个小问题,就是怎么解析数据,有的同志不要傻粑粑的把数据复制,alt+s,粘贴,去生成bean了,因为我们是不确定多少级的,你去生成的就是确定了多少级了。
这个每级的key都是一样的
class TreeModel{
public String name;
public String id;
public List
}
我们这样是不是就可以了,解析出来List
4,点击第一级展开的我们该怎么实现,我们只要把第二级的数据添加到mList后面就行了
如果我们点击第一个是不是就是mList.get(0).getChild();把它添加到mList后面,变成同一级了,这样他们就是同一个列表了。虽然他们是同一级了但是我们要在列表里面看到区别,每级之间要有距离区分。这样我们可以加一个字段int字段,leave来区分,int默认值是0,我们只要在添加子数据之前,循环把子集每个item的leave设置值就行了
然后在adapter里面
这样第一级是不是距离左边一个fixLeft,第二级距离2个fixLeft的距离
按照这个思路展开是不是很容易实现,我们点击哪个就只有把那个的子集添加到后面就行了
还有就是我们需要添加一个isOpen的字段来标识这个item是否已经展开
5,然后我们说下折叠,折叠就是移除点击这项的所有子view。我们发现现在这个数据结构展开之后我们搞不清他们之间的关系,到底谁是谁子集都搞不清了。这样我们要改变一下数据,让他们都关联起来。我们可以在bean里面加一个字段parentId,就是保存父级的id。这样我们就能把上下级关联起来了
在我项目里面的数据已经存在这个parentId了,如果你的数据里面不存在也没关系。我们自己加上。
这个就要在添加子集的时候把parentId赋值,找到之前那一步
上下级关联之后,折叠的话只要根据id去匹配删除子集就可以了。
最后还有一个问题就是,展开了多级,因为第一级和第三级、第四级是无法关联的,所以要使用递归去删除
demo资源下载
https://download.csdn.net/download/qq_24543821/49764541
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)