当前位置:操作系统 > 安卓/Android >>

Android UI 之实现多级列表TreeView

所谓TreeView就是在Windows中常见的多级列表树,在Android中系统只默认提供了ListView和ExpandableListView两种列表,最多只支持到二级列表的实现,所以如果想要实现易做图和更多层次的列表,就需要我们自己来做一些处理了。

    其实这个效果很久以前就有人想办法实现了,但是实现的效果有一些问题,我的实现思路主要也是来自于网络,但是在其基础上修正了逻辑上的一些错误,做了一些优化。

 然后大体说一下思路:

    其实这里实现的多级列表只是一个视觉效果,我们看到的分级效果是由于每行的缩进不同造成的。比如在上面的效果中,山东省和广东省是级别最高的层次,山东省下的青岛市作为山东省的子项,我们增加他的左缩进,这样看起来就有了层次感了。其他的层次也是同理。

    也就是说,我们只用了一个ListView,工作的重点就在于不断变化ListView显示的数据,根据用户的操作,将数据修改为用户想要看到的数据内容,并根据每个数据项的不同,在显示效果上做不同的缩进处理,最终呈现出一个TreeView的效果。

    具体的实现思路参考下面的项目结构和具体代码:

 

Element.java:


[java]
package com.example.androidtreeviewdemo.treeview; 
/**
 * Element类
 * @author carrey
 *
 */ 
public class Element { 
    /** 文字内容 */ 
    private String contentText; 
    /** 在tree中的层级 */ 
    private int level; 
    /** 元素的id */ 
    private int id; 
    /** 父元素的id */ 
    private int parendId; 
    /** 是否有子元素 */ 
    private boolean hasChildren; 
    /** item是否展开 */ 
    private boolean isExpanded; 
     
    /** 表示该节点没有父元素,也就是level为0的节点 */ 
    public static final int NO_PARENT = -1; 
    /** 表示该元素位于最顶层的层级 */ 
    public static final int TOP_LEVEL = 0; 
     
    public Element(String contentText, int level, int id, int parendId, 
            boolean hasChildren, boolean isExpanded) { 
        super(); 
        this.contentText = contentText; 
        this.level = level; 
        this.id = id; 
        this.parendId = parendId; 
        this.hasChildren = hasChildren; 
        this.isExpanded = isExpanded; 
    } 
 
    public boolean isExpanded() { 
        return isExpanded; 
    } 
 
    public void setExpanded(boolean isExpanded) { 
        this.isExpanded = isExpanded; 
    } 
 
    public String getContentText() { 
        return contentText; 
    } 
 
    public void setContentText(String contentText) { 
        this.contentText = contentText; 
    } 
 
    public int getLevel() { 
        return level; 
    } 
 
    public void setLevel(int level) { 
        this.level = level; 
    } 
 
    public int getId() { 
        return id; 
    } 
 
    public void setId(int id) { 
        this.id = id; 
    } 
 
    public int getParendId() { 
        return parendId; 
    } 
 
    public void setParendId(int parendId) { 
        this.parendId = parendId; 
    } 
 
    public boolean isHasChildren() { 
        return hasChildren; 
    } 
 
    public void setHasChildren(boolean hasChildren) { 
        this.hasChildren = hasChildren; 
    } 

package com.example.androidtreeviewdemo.treeview;
/**
 * Element类
 * @author carrey
 *
 */
public class Element {
 /** 文字内容 */
 private String contentText;
 /** 在tree中的层级 */
 private int level;
 /** 元素的id */
 private int id;
 /** 父元素的id */
 private int parendId;
 /** 是否有子元素 */
 private boolean hasChildren;
 /** item是否展开 */
 private boolean isExpanded;
 
 /** 表示该节点没有父元素,也就是level为0的节点 */
 public static final int NO_PARENT = -1;
 /** 表示该元素位于最顶层的层级 */
 public static final int TOP_LEVEL = 0;
 
 public Element(String contentText, int level, int id, int parendId,
   boolean hasChildren, boolean isExpanded) {
  super();
  this.contentText = contentText;
  this.level = level;
  this.id = id;
  this.parendId = parendId;
  this.hasChildren = hasChildren;
  this.isExpanded = isExpanded;
 }

 public boolean isExpanded() {
  return isExpanded;
 }

 public void setExpanded(boolean isExpanded) {
  this.isExpanded = isExpanded;
 }

 public String getContentText() {
  return contentText;
 }

 public void setContentText(String contentText) {
  this.contentText = contentText;
 }

 public int getLevel() {
  return level;
 }

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

 public int getId() {
  return id;
 }

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

 public int getParendId() {
  return parendId;
 }

 public void setParendId(int parendId) {
  this.parendId = parendId;
 }

 public boolean isHasChildren() {
  return hasChildren;
 }

 public void setHasChildren(boolean hasChildren) {
  this.hasChildren = hasChildren;
 }
}
TreeViewAdapter.java:


[java]
package com.example.androidtreeviewdemo.treeview; 
 
import java.util.ArrayList; 
 
import com.example.androidt

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,