Android TreeView实现带复选框树形组织结构

  

之前做项目的时候做人员组织架构时候需要用的到,同样可以用于目录视图。简单搜了一下没有合适的,只找到一个基础的有瑕疵的树形结构,就在基础上改了增加了复选框以及简化了部分代码。下面上演示效果图,时长25秒,手机卡见谅。

  

 Android TreeView实现带复选框树形组织结构

  

复选框有两种设计模式:

  

1,子节点选中则父节点选中,适合多级多项目下方便了解哪些被选中;

  

2,子节点全部选中父节点才选中,更符合日常逻辑,适合少数量以及少层级。

  

下面上主要代码:

  

首先上MainActivity,主要作用上加载布局以及读取数据。实际中一般从数据库获取。命名较为随意请见谅。

        公开课MainActivity延伸AppCompatActivity {      List列表=new ArrayList ();   私人TreeListView列表视图;   私人RelativeLayout RelativeLayout rl;      @Override   保护空白>   公共类节点实现Serializable {   私人节点父母=零;//父节点   私人List儿童=new ArrayList();//子节点   私人字符串值;//节点显示值   私人布尔完成=false;//是否被选中   私人布尔isExpand=true;//是否处于扩展状态   私人布尔hasCheckBox=true;//是否有复选框   私人字符串parentId=零;   私人字符串curId=零;//父节点集合   私人List父母=new ArrayList<在();/* *   *设置节点值   *   * @param parentId   *待办事项   * @param curId   *待办事项   */curId parentId公共节点(字符串,字符串,字符串值){//TODO自动生成构造函数存根      这一点。值=https://www.yisu.com/zixun/value;   这一点。parentId=parentId;   这一点。curId=curId;      }      公共列表<节点> getParents () {   回报父母;   }      公共空间setParents(节点节点){   如果(节点!=null) {   如果(! parents.contains(节点)){   parents.add(节点);   }   }   }/* *   *得到父节点   */公共节点getParent () {   回报父母;   }/* *   *设置父节点   * @param父   */公共空间setParent(父节点){   这一点。父母=父母;   }/* *   *得到子节点   * @return   */公共列表<节点>调用getchildren () {   返回儿童;   }/* *   *潘度是否根节点   * @return   *   */公共布尔isRoot () {   返回父==null ?真:假;   }/* *   *是否被选中   * @return   *   */公共布尔完成(){   返回完成;   }   公共空间setChecked(布尔完成){   这一点。完成=完成;   }/* *   *是否是展开状态   * @return   *   */公共布尔isExplaned () {   返回isExpand;   }/* *   *设置展开状态   * @param isExplaned   *   */公共空间setExplaned(布尔isExplaned) {   这一点。isExpand=isExplaned;   }/* *   *是否有复选框   * @return   *   */公共布尔hasCheckBox () {   返回hasCheckBox;   }/* *   *设置是否有复选框   * @param hasCheckBox   *   */公共空间setHasCheckBox(布尔hasCheckBox) {   这一点。hasCheckBox=hasCheckBox;   }/* *   *得到节点值   * @return   *   */公共字符串getValue () {   返回值;   }/* *   *设置节点值   * @param价值   *   */公共空间setValue(字符串值){   这一点。值=价值;   }/* *   *增加一个子节点   * @param节点   *   */公共空间addNode(节点节点){   如果(! childrens.contains(节点)){   childrens.add(节点);   }   }/* *   *移除一个子节点   * @param节点   *   */公共空间removeNode(节点节点){   如果(childrens.contains(节点))   childrens.remove(节点);   }/* *   *移除指定位置的子节点   * @param位置   *   */公共空间removeNode (int位置){   childrens.remove(位置);   }/* *   *清除所有子节点   *   */公共空间清理(){   childrens.clear ();   }/* *   *判断给出的节点是否当前节点的父节点   * @param节点   * @return   *   */公共布尔isParent(节点){   如果(父==null)返回false;   如果(parent.equals(节点))返回true;   返回parent.isParent(节点);   }/* *   *递归获取当前节点级别   * @return   *   */公共int getLevel () {   返回父==null ? 0: parent.getLevel () + 1;   }/* *   *父节点是否处于折叠的状态   * @return   *   */公共布尔isParentCollapsed () {   如果(父==null)返回false;   如果(! parent.isExplaned()返回true;   返回parent.isParentCollapsed ();   }/* *   *是否叶节点(没有展开下级的几点)   * @return   *   */公共布尔isLeaf () {   返回childrens.size()

Android TreeView实现带复选框树形组织结构