android tree树状列表+checkbox
来源:互联网 发布:腾讯云是不是阿里云 编辑:程序博客网 时间:2024/05/16 07:23
在github上找了好久,想改成自己想要的效果不容易,是终改成了效果,记录一下
1、从服务器传来的数据,可能是深度树状结构,通过递归对树进行遍历
2、把json数据,转换成我们的TreeNode数据。
3、动态的设置list中距离左边的距离,实现伪层次结构。
代码调用
package com.example.treedemo;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.widget.Button;import android.widget.RelativeLayout;import android.widget.TextView;import com.google.gson.Gson;import java.util.ArrayList;import java.util.List;import bean.TreeData;import bean.TreeNode;import view.Node;import view.NodeResource;import view.TreeListView;public class MainActivity extends Activity { private TreeListView listView; private Button button; private Button btn_delect; ArrayList<TreeNode> topNodes = new ArrayList<TreeNode>(), allNodes = new ArrayList<TreeNode>(); private TextView text_select; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button); btn_delect = (Button) findViewById(R.id.btn_delect); text_select = (TextView) findViewById(R.id.text_select); RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.main_relative_layout); RelativeLayout rl = new RelativeLayout(this); rl.setLayoutParams(new LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT)); listView = new TreeListView(this, initNodeTree()); List<Node> resultNode = listView.mNodeList; relativeLayout.addView(listView); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ArrayList<Node> list = (ArrayList<Node>) listView.get(); list.toString(); if (listView.get().size() == 0) { return; } String s = ""; for (int i = 0; i < listView.get().size(); i++) { s += listView.get().get(i).getTitle() + " "; } text_select.setText(s); Log.i("====list", listView.get() + ""); } }); btn_delect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listView.setUnSelect(); } }); } public List<NodeResource> initNodeTree() {// List<NodeResource> list = new ArrayList<NodeResource>();// NodeResource n1 = new NodeResource("" + -1, "17018m170diosfvieqh5drn2u30mi1shn5", "智设施测试", "123");// list.add(n1);// NodeResource n2 = new NodeResource("17018m170diosfvieqh5drn2u30mi1shn5", "17072n261s99viv1piif7pvshj0h3mkke2", "a部门", "123");// list.add(n2);// NodeResource n3 = new NodeResource("17072n261s99viv1piif7pvshj0h3mkke2", "17072p144434ru15iuhbgrlk0jc05qecj7", "a111", "123");// list.add(n3);// NodeResource n4 = new NodeResource("17072n261s99viv1piif7pvshj0h3mkke2", "17072p13qjnce5pvocgaupj7qu8qkfgk75", "a222", "123");// list.add(n4);// NodeResource n5 = new NodeResource("17018m170diosfvieqh5drn2u30mi1shn5", "17072n27rkh63ieb9ggtpqirv8d1j1oh6k", "b部门", "123");// list.add(n5); getData(); ArrayList<NodeResource> listTree = new ArrayList<>();// for (int i = 0; i < allNodes.size(); i++) { NodeResource nr = new NodeResource(allNodes.get(i).getParendId(), allNodes.get(i).getId(), allNodes.get(i).getContentText(), "123"); listTree.add(nr); } return listTree; } public ArrayList getData() { String str = TestData.data; Gson gson = new Gson(); TreeData treeData = gson.fromJson(str, TreeData.class); initTreeNodesList(treeData); Log.i("-----allNodes", allNodes.size() + ""); return allNodes; } private void initTreeNodesList(TreeData roomInfo) { if ("-1".equals(roomInfo.getRoomid())) { if (roomInfo.getChildren() == null) { return; } for (int i = 0; i < roomInfo.getChildren().size(); i++) { //添加节点 -- 节点名称,节点level,节点id,父节点id,是否有子节点,是否展开 TreeNode rootTreeNode = new TreeNode(roomInfo.getChildren().get(i).getRoomname(), TreeNode.TOP_LEVEL, roomInfo.getChildren().get(i).getRoomid(), TreeNode.NO_PARENT, true, false); topNodes.add(rootTreeNode); allNodes.add(rootTreeNode); } } else { for (int i = 0; i < allNodes.size(); i++) { if (roomInfo.getFroomid().equals(allNodes.get(i).getId())) { TreeNode treeNode = new TreeNode(roomInfo.getRoomname(), allNodes.get(i).getLevel() + 1, roomInfo.getRoomid(), roomInfo.getFroomid(), !"true".equals(roomInfo.getLeaf()) , false); allNodes.add(treeNode); } } } if (!"true".equals(roomInfo.getLeaf())) { for (TreeData info : roomInfo.getChildren()) { initTreeNodesList(info); } } }}
代码下载地址
http://download.csdn.net/detail/androidxiaogang/9783882
1 0
- android tree树状列表+checkbox
- Android中的树状(tree)列表
- Android中的树状(tree)列表
- sx:tree 标签生成树状的文件列表
- Android无限极树状(tree)结构Demo
- Android中ListView如何获取列表中选中的CheckBox
- 树状dp Tree of Tree
- Tree的CheckBox
- Tree with CheckBox nodes
- swing checkbox tree
- 按钮弹出 checkbox tree
- checkbox列表选择2
- 列表标题栏添加CheckBox
- 列表checkbox效果
- 二级列表 checkbox
- Apple Tree-----树状数组
- destoon分类树状列表
- Android CheckBox
- JSP声明语句/脚本段/表达式
- 关于QCustomPlot的绘图
- 【变量过滤】防止代码注入
- java:求一个字符串中子字符串的个数,简便算法
- Day008:merge two sorted lists
- android tree树状列表+checkbox
- 迷茫<第一篇:初到北京>
- [转]Facebook 开源的快速文本分类器 FastText
- iOS 刷新一个行
- 2016级数据结构第一次上机解题报告
- java.io.IOException: No error in nativeavailable
- 频繁模式挖掘 Apri算法
- acm程序设计书中题目第e题解析
- Shiro系列之Shiro+Spring MVC整合(Integration)