android 嵌套数据绑定,Android.轻松地将嵌套的数据展示在ListView和RecyclerView中(2)。...
在ListView中展示嵌套的数据是非常常见的,比如QQ的好友列表,外部是分组,分组里嵌套着好友列表。这种二级的嵌套数据可以用ExpandableListView展示,但是如果是三级或者更深的嵌套层级,ExpandableListView就不适用了。那么如何实现呢?通常的做法是自己编写数据结构,将嵌套的数据映射到列表中,再将列表展示到ListView中。但是这样做会让代码依赖于需求,比较难维护,并
在ListView中展示嵌套的数据是非常常见的,比如QQ的好友列表,外部是分组,分组里嵌套着好友列表。这种二级的嵌套数据可以用ExpandableListView展示,但是如果是三级或者更深的嵌套层级,ExpandableListView就不适用了。那么如何实现呢?
通常的做法是自己编写数据结构,将嵌套的数据映射到列表中,再将列表展示到ListView中。但是这样做会让代码依赖于需求,比较难维护,并且不同的场景需要编写不同的实现方式。
ListView的使用方式很简单,程序员告诉ListView要展示的列表的长度及列表各位置的数据。类似地,如果能告诉ListView更多的信息,如列表某个位置的数据嵌套了另一个列表,让ListView去递归地获取更深层次的信息并展示就好了。然而ListView并不具有这样的功能。不过别担心,我们可以扩展ListView的Adapter,让Adapter具备这样的能力,这样,只要需要展现嵌套的数据,使用这样的Adapter就可以了,无需烦恼数据结构到列表的映射。
那么如何实现这样的Adapter呢?Adapter需要提供接口,让程序员告诉它数据的层级关系,然后内部维护一个列表代表对嵌套数据的映射。ListView真正使用的是这个内部列表,我们只是扩展了Adapter让其更懂我们数据的结构。
以下是这种Adapter的一种具体实现的代码,适用于ListView和RecyclerView。
值得一提的是,这种实现同时具有展开和收缩节点的功能,不限于节点的层级,只需要动态地告诉Adapter某一节点的列表长度为真实长度或者欺骗它,告诉它长度为0.
PreOrderTreeAdapter内部映射数据到列表的实现方式在我的另外一篇文章中有介绍:www.jianshu.com/p/6e0d76dc16fa
跟这篇文章比较相似,没有必要再看,感兴趣可以直接看其代码实现:LinearTree
更多推荐
所有评论(0)