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