android一个recyclerView实现无限层级多层级列表折叠树

android一个recyclerView实现无限层级多层级列表折叠树,第1张

先看下效果

 现在很多文章都是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 Listchild;
}

我们这样是不是就可以了,解析出来ListmList;

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/992837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存