android树形菜单
一、概述
项目要求:搞一个树形菜单用户展示:公司-->部门--->员工。公司下有多部门,部门下有员工。
二、代码示例
/** * TreeView列表 * https://github.com/bmelnychuk/AndroidTreeView */ class TreeViewListActivity : FragmentActivity() { private var counter = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_tree_view_list) // initViews() initData() initView() // initCustomTreeNode() } private fun initView() { //创建根节点 val root = TreeNode.root() val list = initData() list.forEachIndexed { index, treeNodeOneStyleBean -> val treeNode1 = TreeNode(treeNodeOneStyleBean).setViewHolder(TreeNodeOneStyleHolder(this@TreeViewListActivity)) setTreeData(treeNode1, treeNodeOneStyleBean) root.addChildren(treeNode1) } val tView = AndroidTreeView(this@TreeViewListActivity, root) tView.setDefaultAnimation(true) tView.setDefaultContainerStyle(R.style.TreeNodeStyleCustom) tView.setDefaultNodeClickListener(nodeClickListener) tView.setDefaultNodeLongClickListener(nodeLongClickListener) container.addView(tView.view) } /** * 递归设置tree数据 */ private fun setTreeData(node: TreeNode, nodeBean: TreeNodeStyleBean) { nodeBean.treeList.forEachIndexed { index, treeNodeStyleBean -> Log.e("setTreeData:", nodeBean.styleType.toString()) when (treeNodeStyleBean.styleType) { 0 -> { val treeNode1 = TreeNode(treeNodeStyleBean).setViewHolder(TreeNodeOneStyleHolder(this@TreeViewListActivity)) node.addChildren(treeNode1) setTreeData(treeNode1, treeNodeStyleBean) } 1 -> { val treeNode2 = TreeNode(treeNodeStyleBean).setViewHolder(TreeNodeTwoStyleHolder(this@TreeViewListActivity)) node.addChildren(treeNode2) setTreeData(treeNode2, treeNodeStyleBean) } 2 -> { val treeNode3 = TreeNode(treeNodeStyleBean).setViewHolder( TreeNodeThreeStyleHolder(this@TreeViewListActivity) ) node.addChildren(treeNode3) setTreeData(treeNode3, treeNodeStyleBean) } } } } private fun fillDownloadsFolder(node: TreeNode) { val downloads = TreeNode(IconTreeItem(0, "Downloads" + counter++)) node.addChild(downloads) if (counter < 5) { fillDownloadsFolder(downloads) } } private val nodeClickListener = TreeNodeClickListener { node, value -> ToastUtils.s(this@TreeViewListActivity, "您点击了:${node.isLastChild}") } private val nodeLongClickListener = TreeNodeLongClickListener { node, value -> true } private fun initCustomTreeNode() { //创建根节点 val root = TreeNode.root() //创建一级目录 val treeNode1 = TreeNode(TreeNodeOneStyleBean()).setViewHolder(TreeNodeOneStyleHolder(this@TreeViewListActivity)) val treeNode2 = TreeNode(TreeNodeOneStyleBean()).setViewHolder(TreeNodeOneStyleHolder(this@TreeViewListActivity)) val treeNode3 = TreeNode(TreeNodeOneStyleBean()).setViewHolder(TreeNodeOneStyleHolder(this@TreeViewListActivity)) addTwoStyleNode(treeNode1) addTwoStyleNode(treeNode3) addTwoStyleNode(treeNode2) root.addChildren(treeNode1, treeNode2, treeNode3) val tView = AndroidTreeView(this@TreeViewListActivity, root) tView.setDefaultAnimation(true) tView.setDefaultContainerStyle(R.style.TreeNodeStyleCustom) tView.setDefaultNodeClickListener(nodeClickListener) tView.setDefaultNodeLongClickListener(nodeLongClickListener) container.addView(tView.view) } private fun addTwoStyleNode(node: TreeNode) { val treeNode1 = TreeNode(TreeNodeTwoStyleBean()).setViewHolder(TreeNodeTwoStyleHolder(this@TreeViewListActivity)) val treeNode2 = TreeNode(TreeNodeTwoStyleBean()).setViewHolder(TreeNodeTwoStyleHolder(this@TreeViewListActivity)) val treeNode3 = TreeNode(TreeNodeTwoStyleBean()).setViewHolder(TreeNodeTwoStyleHolder(this@TreeViewListActivity)) addTwoStyleNode2(treeNode1) addThreeStyleNode(treeNode2) addThreeStyleNode(treeNode3) node.addChildren(treeNode1, treeNode2, treeNode3) } private fun addTwoStyleNode2(node: TreeNode) { val treeNode1 = TreeNode(TreeNodeTwoStyleBean()).setViewHolder(TreeNodeTwoStyleHolder(this@TreeViewListActivity)) val treeNode2 = TreeNode(TreeNodeTwoStyleBean()).setViewHolder(TreeNodeTwoStyleHolder(this@TreeViewListActivity)) val treeNode3 = TreeNode(TreeNodeTwoStyleBean()).setViewHolder(TreeNodeTwoStyleHolder(this@TreeViewListActivity)) addThreeStyleNode(treeNode1) addThreeStyleNode(treeNode2) addThreeStyleNode(treeNode3) node.addChildren(treeNode1, treeNode2, treeNode3) } private fun addThreeStyleNode(node: TreeNode) { val treeNode1 = TreeNode(TreeNodeThreeStyleBean()).setViewHolder(TreeNodeThreeStyleHolder(this@TreeViewListActivity)) val treeNode2 = TreeNode(TreeNodeThreeStyleBean()).setViewHolder(TreeNodeThreeStyleHolder(this@TreeViewListActivity)) val treeNode3 = TreeNode(TreeNodeThreeStyleBean()).setViewHolder(TreeNodeThreeStyleHolder(this@TreeViewListActivity)) node.addChildren(treeNode1, treeNode2, treeNode3) } private fun initData(): ArrayList<TreeNodeStyleBean> { val list1 = ArrayList<TreeNodeStyleBean>() //第一层数据源 val bean1 = TreeNodeStyleBean(styleType = 0) val bean2 = TreeNodeStyleBean(styleType = 0) val bean3 = TreeNodeStyleBean(styleType = 0) list1.add(bean1) list1.add(bean2) list1.add(bean3) //第二层数据源 val twoBean1 = TreeNodeStyleBean(styleType = 1) val twoBean2 = TreeNodeStyleBean(styleType = 1) val twoBean3 = TreeNodeStyleBean(styleType = 1) val list2 = ArrayList<TreeNodeStyleBean>() list2.add(twoBean1) list2.add(twoBean2) list2.add(twoBean3) bean1.treeList = list2 bean2.treeList = list2 bean3.treeList = list2 //第三层数据源 val threeBean1 = TreeNodeStyleBean(styleType = 2) val threeBean2 = TreeNodeStyleBean(styleType = 2) val threeBean3 = TreeNodeStyleBean(styleType = 2) val list3 = ArrayList<TreeNodeStyleBean>() list3.add(threeBean1) list3.add(threeBean2) list3.add(threeBean3) twoBean1.treeList = list3 twoBean2.treeList = list3 twoBean3.treeList = list3 return list1 } }
浙公网安备 33010602011771号