Android实现多级树形菜单并支持多选功能

  

公司有一个需求,实现一个多级的树形菜单,并且支持多选功能,实现这个功能之前,我在网上找了找,树形菜单很好找,但是支持多选功能并没有很合适的,所以没办法,只能自己动手写了,由于本人第一次写博客,如果有什么不足的地方,大家多多指教。

  

这个是效果图:

  

 Android实现多级树形菜单并支持多选功能

  

这个菜单是可以无限极分类的,如果父元素的子元素,都被选了,父元素的复选框应该自动选中,或者说选中一个父元素,当前父元素下的子元素应该全部被选中。就是这样的一个效果!

  

这样的树形结构,重点是我们应该怎样去定义数据结构,这个是节点实体类:

        公共类节点实现Serializable {   私人节点父母=零;//父节点   私人List儿童=new ArrayList();//子节点   私人字符串标题;//节点显示文字   私人字符串值;//节点显示值   私人布尔完成=false;//是否被选中   私人布尔isExpand=true;//是否处于扩展状态   私人布尔hasCheckBox=true;//是否有复选框   私人字符串parentId=零;   私人字符串curId=零;   私人布尔isVisiable=true;//自己加的,父节点集合   私人List父母=new ArrayList<在();/* *   *设置节点值   *   * @param parentId   *待办事项   * @param curId   *待办事项   */公共节点(parentId字符串标题、字符串值字符串,字符串curId) {//TODO自动生成构造函数存根   这一点。标题=标题;   这一点。值=https://www.yisu.com/zixun/value;   这一点。parentId=parentId;//这个。图标=iconId;   这一点。curId=curId;   }      公共列表<节点> getParents () {   回报父母;   }/* *   *得到父节点   * @return   *   */公共节点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   *   */公共字符串getTitle () {   返回标题;   }/* *   *设置节点标题   * @param标题   *   */公共空间setTitle(字符串标题){   这一点。标题=标题;   }/* *   *得到节点值   * @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实现多级树形菜单并支持多选功能