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
原创粉丝点击