Android实现树形层级ListView

2019-12-10 19:06:15于丽

数据实体Bean:

 

public class TestBean {
@TreeNodeId
private int id;//添加对应的注解
@TreeNodePid
private int pid;
@TreeNodeLabel
private String label;
private String desc;


public TestBean(int id, int pid, String label) {
super();
this.id = id;
this.pid = pid;
this.label = label;
}


public TestBean() {
// TODO Auto-generated constructor stub
}


public int getId() {
return id;
}


public void setId(int id) {
this.id = id;
}


public int getPid() {
return pid;
}


public void setPid(int pid) {
this.pid = pid;
}


public String getLabel() {
return label;
}


public void setLabel(String label) {
this.label = label;
}


public String getDesc() {
return desc;
}


public void setDesc(String desc) {
this.desc = desc;
}

}

数据展示中的Node类,我们可以通过反射+注解把任意实体bean如TestBean映射成我们想要的Node

public class Node {
private int id;// 所在节点id
private int pid = 0;// 父节点的id
private String name;// 对应的内容
private int level;// 所在ListView中树层级
private boolean isExpand = false;// 所在节点是否展开
private int icon;// 图标icon
private Node parent;// 父节点Node
private List<Node> children = new ArrayList<Node>();// 对应的子节点数据集
public Node() {
}

public Node(int id, int pid, String name) {
this.id = id;
this.pid = pid;
this.name = name;
}


public int getId() {
return id;
}


public void setId(int id) {
this.id = id;
}


public int getPid() {
return pid;
}


public void setPid(int pid) {
this.pid = pid;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}

 

/**
* 当前节点所在的层级
* @description:
* @date 2015-10-9 下午4:02:29
*/
public int getLevel() {
return parent == null ? 0 : parent.getLevel() + 1;
}


public void setLevel(int level) {
this.level = level;
}


public boolean isExpand() {
return isExpand;
}


public void setExpand(boolean isExpand) {
this.isExpand = isExpand;
if (!isExpand && children.size() > 0) {// 如果当前节点没有展开,则其子节点展开状态也是:没展开
for (Node node : children) {
node.setExpand(false);
}
}
}


public int getIcon() {
return icon;
}


public void setIcon(int icon) {
this.icon = icon;
}


public Node getParent() {
return parent;
}


public void setParent(Node parent) {
this.parent = parent;
}


public List<Node> getChildren() {
return children;
}


public void setChildren(List<Node> children) {
this.children = children;
}


/**
* 判断当前节点有没有子节点
* @description:
* @author ldm
* @date 2015-10-9 下午3:59:42
*/
public boolean isLeaf() {
return children.size() == 0;
}


/**
* 是不是根节点
* @description:
* @author ldm
* @date 2015-10-9 下午3:58:15
*/
public boolean isRoot() {
return parent == null;
}


/**
* 当前节点所在父节点是否展开
* @description:
* @author ldm
* @date 2015-10-9 下午3:58:34
*/
public boolean isParentExpand() {
if (parent == null) {
return false;
}
else {
return parent.isExpand;
}
}
}