ListView/RecycleView与树结构实现多级目录
来源:互联网 发布:怎么登录js邮箱 编辑:程序博客网 时间:2024/05/16 15:08
之前做过一个多级ListView的多级目录结构,终于有闲时间来分享了。先看效果图吧:
常规做法
ListView为多级的显示方式,与此类似的有文件系统、省市区分级等等,类似于B树。
其数据结构一般如下可能:
A. 通过索引连接树的节点,主要特点如下:
某一点通过索引将所有点联系,类似于链表,任何两点间没有直接关系,如果要得到某个点需要算法和当前表/总表来遍历。存储效率高/内存占用少但遍历较耗时。
B. 直接连接树的节点,主要特点如下:
某一点通过实体类联系所有点,类似于多个数组,任何两点之间都有关系,任何一点都是一个树,如果需要得到某个点,只需要通过算法遍历subLayer/parentLayer即可。占用额外内存但遍历快速(只需要从当前节点开始遍历,不需要节点字典)。
核心代码
树结构的核心算法主要是查找了吧。大学的时候做过一个双向带权图的公交网络。
如果采用做法A,那么主要代码如下(偷懒一下,就用递归吧):
1.查找子节点:
/** * @param node 当前节点 */ public static List<Node> getAllChilds(Node node, List<Node> checkCollection) { List<Node> allChildNode = new ArrayList<>(); if (null != node) { List<String> childid = node.getSubLayerIds(); if (null != childid) for (String id : childid) { Node child = LeftNodeUtil.getNodeById(id, checkCollection); if (null != child) { if (null != allChildNode) { allChildNode.add(child); } } if (null != child && !child.isLeaf()) { getAllChilds(child, allChildNode, checkCollection); } } else { LogManage.e("OneMapActivity", "节点未找到,为空!"); } } return allChildNode; }
/** * @param node 当前节点 * @param checkCollection 节点字典 */ public static List<Node> getAllParent(Node node, List<Node> checkCollection) { List<Node> allParentIds = new ArrayList<>(); if(null != node) { String parentId = node.getParentLayerId(); Node pNode = getNodeById(parentId, checkCollection); if (null != pNode) allParentIds.add(pNode); if (null != parentId && null != pNode && !Constants.TOP_NODE_ID.equalsIgnoreCase(parentId)) { getAllParent(pNode, allParentIds, checkCollection); } } return allParentIds; }
public static Node getNodeById(String id, List<Node> list) { Node id_Node = null; for (Node node : list) { if (null != id) if (id.equalsIgnoreCase(node.getId())) { id_Node = node; break; } } return id_Node; }
到此OK,这就是多级ListView/RecycleView的实现了。(示例代码只是修改原有代码,可能有小问题,Copy&Past的同学请注意一下)
阅读全文
0 0
- ListView/RecycleView与树结构实现多级目录
- ListView实现多级目录
- Android-listview实现多级树列表(文件夹目录结构和企业级通讯录结构)
- RecycleView的多级树效果
- listView与recycleview注意事项
- 多级listview的实现
- Android应用源码ListView实现的目录树结构
- word 多级目录实现
- 多级目录的实现
- RecyclerView多级目录实现
- RecycleView 与 Listview 的差别
- 创建多级目录多级文件夹实现方法
- ListView实现多级树形菜单
- 实现多线程拷贝多级目录
- nachos文件系统-实现多级目录
- 多级目录联动效果实现
- asp.net mvc 多级目录结构
- asp.net mvc 多级目录结构
- JAVA中循环删除list中元素(移除list两时间范围外的元素)
- React16 中的错误处理
- Android 打开TCPIP调试
- C中的typedef
- Linux 修改IP地址DNS服务器等网络设置
- ListView/RecycleView与树结构实现多级目录
- 关于dubbo创建服务和引用服务时,会报错:cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration...
- Apache设置404页面
- 【九度OJ】1180:对称矩阵
- 小钢聊全栈
- SpringBoot实战——微信点餐系统
- JfreeChart 实例
- 【最新、最详细】电脑网站接入支付宝接口的方法
- JZOJ2938. 【NOIP2012模拟8.9】分割田地