最近写了一个基于树结构的任意层级列表,其展现效果就类似于android原生的ExpandableListView啦,不过自己写一个也是挺好玩的。在这里我主要是使用到了树这种数据结构来实现任意层级可展开/收起的效果的。先来看一下效果图呗。
嗯...看起来比较朴素。。嘛,android的listView你随便丢上来也很朴素的...这个不是关键嘛,视图这种东西你想要多华丽都可以后续去搞嘛,做个demo不要那么抠细节~~~
好的,说正事哈。在介绍怎么实现这种层级列表之前,我们先来看看树这个东西是怎么用的哈。
嗯...到百度上借了一张图,简单的讲一下,这样一棵树对应到层级列表上就是这个样子的:
A
---B
------D
---C
------E
这是一个三级列表。
那么,像上面那三张效果图中的那种层级列表对应到树又是怎么样的呢?看下面一张图。
嗯...用keynote随手画的,将就着看吧。其实了解树这一数据结构的孩子应该对比着看了以后心里就一目了然了。列表全部展开以后其各个item显示的顺序就是这棵树深度优先遍历的顺序。不了解的孩子可以先百度一下~~~百度百科也够用了。
嗯...所以总结一句话,要实现任意层级的列表,必须先实现如何构造一颗任意高度和宽度的树,以及如何对该树进行深度优先遍历。
1. 构造一棵树的准备
首先,树得有节点,我们很容易就会想到,树作为一个对象,其包含的元素主要就是节点,节点也作为一个对象,因此,我们需要构造一个节点的类。那么,我们进一步考虑,这个节点类要做哪些工作呢?比较基本的,它得有一个对自身的标识吧,也就是id,作为保证能在树中找到它的唯一标识&