treeview java_自定义树形结构组件—TreeView

自定义树形结构组件—TreeView

注:该文章为(男人应似海)原创,如需转载请注明出处!

组件功能

实现树形结构目录效果

效果图

4e107542cc25474ebdf77c3ec0c9e222.png

3aa219e1ee1a85777fb1b74d527c1260.png

实现方式

用两个树形节点类集合分别去存储所有节点(List treeElements)和当前显示节点(List currentElements),当前显示节点集合currentElements中的数据显示在ListView中。当点击含有子节点的节点时(如上图中的A、B、C、CC11)会把相应的子节点从所有节点集合treeElements中找到并添加当前显示节点集合currentElements中在ListView上显示或从currentElements中删除并从ListView刷新数据。

关于数据获取

这里获取树节点数据的方式是在工程资源中assets文件下创建一个本地文件(先在assets文件下创建textRes文件夹,然后在textRes文件夹下创建一个记录数据的文件,这里是treeview_elements.properties)如下图所示。

3725b1486244709d4d66f944432e372f.png

这个文件以某种格式记录数据参数(和树节点类属性对应),具体请查看下面的代码解释。

treeview_elements.properties文件中数据如下:

#id(s)-level(int)-title(s)-fold(b)-hasChild(b)-hasParent(b)-parentId(s)

1011-1-A-false-true-false-null

1021-2-AA11-false-false-true-1011

1022-2-AA22-false-false-true-1011

1023-2-AA33-false-false-true-1011

1024-2-AA44-false-false-true-1011

2011-1-B-false-true-false-null

2021-2-BB11-false-false-true-2011

2022-2-BB22-false-false-true-2011

2023-2-BB33-false-false-true-2011

2024-2-BB44-false-false-true-2011

3011-1-C-false-true-false-null

3021-2-CC11-false-true-true-3011

3031-3-CCC111-false-false-true-3021

3032-3-CCC222-false-false-true-3021

3033-3-CCC333-false-false-true-3021

以#开始的行为注释行,用于说明数据的含义和属性,其他的每行数据都代表了一个树节点对象实例TreeElement。如1021-2-AA11-false-false-true-1011解释如下:

数据

含义

1021

表示该节点id为1021

2

表示该节点为2级节点

AA11

表示该节点的标题或内容为AA11

false

表示该节点当前是处于为展开状态,即子节点不可见(只针对有子节点的节点)

false

表示该节点没有子节点

true

表示该节点有父节点

1011

表示该节点的父节点是1011

这种方式适合于数据量大且数据固定的情况,当数据较少时我们也可以通过直接new树节点对象来得到树节点集合。如果需要获取网络数据,也可以指定服务器返回特定格式的json数据,然后解析。

代码

TreeElement.java

/**

* 类名:TreeElement.java

* 类描述:树形结构节点类

* @author wader

* 创建时间:2011-11-03 16:32

*/

public class TreeElement {

String id = null;// 当前节点id

String title = null;// 当前节点文字

boolean hasParent = false;// 当前节点是否有父节点

boolean hasChild = false;// 当前节点是否有子节点

boolean childShow = false;// 如果子节点,字节当当前是否已显示

String parentId = null;// 父节点id

int level = -1;// 当前界面层级

boolean fold = false;// 是否处于展开状态

public boolean isChildShow() {

return childShow;

}

public void setChildShow(boolean childShow) {

this.childShow = childShow;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public boolean isHasParent() {

return hasParent;

}

public void setHasParent(boolean hasParent) {

this.hasParent = hasParent;

}

public boolean isHasChild() {

return hasChild;

}

public void setHasChild(boolean hasChild) {

this.hasChild = hasChild;

}

public String getParentId() {

return parentId;

}

public void setParentId(String parentId) {

this.parentId = parentId;

}

public int getLevel() {

return level;

}

public void setLevel(int level) {

this.level = level;

}

public boolean isFold() {

return fold;

}

public void setFold(boolean fold) {

this.fold = fold;

}

@Override

public String toString() {

return "id:" + this.id + "-level:" + this.level + "-title:"

+ this.title + "-fold:" + this.fold + "-hasChidl:"

+ this.hasChild + "-hasParent:" + this.hasParent + "-parentId:"+ this.parentId;

}

}

TreeViewAdapter.java

/**

* 类名:TreeViewAdapter.java

* 类描述:用于填充数据的类

* @author wader

* 创建时间:2011-11-03 16:32

*/

public class TreeViewAdapter extends BaseAdapter {

class ViewHolder {

ImageView icon;

TextView title;

}

Context cont

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值