android 多层树型目录,Android开发之多层树型目录的实现

树型目录是一种直观的列表显示目录方式,在用户界面得到普遍使用,如Windows的资源管理器窗口,Eclipse的Package

Explorer等。因此,我们也想在Android应用中使用这种方式实现对各类信息的分层与显示。然而,Android应用层只提供了ListView单层列表和ExpandableListView二级列表,无法直接显示像树型目录这样多层次的列表。那么如何在android应用上实现这树型目录呢。

我们知道ListView显示列表是通过添加适配器Adapter,适配器装配数据,在适配器的getView()方法中实现绘制列表的每一行。因此,我们可以得出,要实现树型目录的展开,收起,只是让适配器装配不同的数据。明白了这些,那么我们来实现树型目录就易如反掌。

首先,先来分析下树型目录的基本元素—目录结点TreeNode,每一个节点都有父节点(根节点除外)和可能存在子节点列表,每一个节点可以是目录也可以是一个文件,每一个节点在树型目录中都有一个等级level,节点有展开,收起状态expanded。

在弄清了目录节点具备的属性及动作后,我们需要为每一个TreeNode对象添加子节点列表childNodes,简单地说就是每一级目录的子目录。我们知道,在java程序中,使用递归遍历目录,因此,在这里我们也使用递归来为每一个节点增加子节点列表。

//parentNode是父节点,parentFile父节点所在的目录。

private void createTree(TreeNode parentNode, File

parentFile) {

if (parentFile.isDirectory()) { // 是目录

parentNode.setIsDirectory(true); //设置节点为目录

if (parentFile.list().length > 0) {

parentNode.setHasChild(true); //该节点有子节点

}

for (File subFile : parentFile.listFiles()) {

TreeNode subNode = new TreeNode(subFile.getName());

subNode.setHasParent(true) //子节点有父节点;

subNode.setLevel(parentNode.getLevel() + 1);//节点等级

parentNode.addChild(subNode); //添加子节点

createTree(subNode, subFile); //递归

}

} else { // 是文件

parentNode.setIsDirectory(false);

parentNode.setHasChild(false);

}

}

这样,我们为每一个节点都添加了子节点,在适配器中只需将子节点列表添加到适配器的数据列表就可以显示展开目录,数据列表移除子节点列表即可收起目录。代码如下:

if (node.getIsDirectory()) {

if (node.isExpanded()) { // 收起

node.setExpanded(false);

ArrayList temp =

new ArrayList();

for (int i = position + 1; i <

treeNodes.size(); i++) {

if (node.getLevel() >=

treeNodes.get(i).getLevel()) {

break;

}

treeNodes.get(i).setExpanded(false);

temp.add(treeNodes.get(i));

}

treeNodes.removeAll(temp);

TreeListAdapter.this.notifyDataSetChanged();

} else { // 展开

node.setExpanded(true);<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值