這篇文章主要爲大家詳細介紹了android實現菜單三級樹效果,具有一定的參考價值,感興趣的小夥伴們可以參考一下
本文實例爲大家分享了android實現菜單三級樹展示的具體代碼,供大家參考,具體內容如下
以下是部分代碼,完整代碼請在最下面點擊下載:
【MainActivity】
public void treeOnClick() { // TODO Auto-generated method stub superAdapter.RemoveAll(); superAdapter.notifyDataSetChanged(); String MenuCatName = getDate("MenuCatName"); String MenuGroupName = getDate("MenuGroupName"); String MenuItemName = getDate("MenuItemName"); // 一級菜單名數組 parent = MenuCatName.split("/"); // 二級菜單名數組 child = MenuGroupName.split("/"); // 三級菜單名數組 grandchild = MenuItemName.split("/"); List<SuperTreeViewAdapter.SuperTreeNode> superNodeTree = superAdapter .GetTreeNode(); for (int i = 0; i < parent.length; i++) { SuperTreeViewAdapter.SuperTreeNode superNode = new SuperTreeViewAdapter.SuperTreeNode(); superNode.parent = parent[i]; for (int j = 0; j < child_grandchild.length; j++) { TreeViewAdapter.TreeNode node = new TreeViewAdapter.TreeNode(); node.parent = child_grandchild[j][0][0]; for (int k = 0; k < child_grandchild[j][1].length; k++) { node.childs.add(child_grandchild[j][1][k]); } superNode.childs.add(node); } superNodeTree.add(superNode); } superAdapter.UpdateTreeNode(superNodeTree); expandableListView.setAdapter(superAdapter); }
【SuperTreeViewAdapter】
public ExpandableListView getExpandableListView() { AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, TreeViewAdapter.ItemHeight); ExpandableListView superTreeView = new ExpandableListView(parentContext); superTreeView.setLayoutParams(lp); // 去掉子菜單分割線 superTreeView.setDivider(null); return superTreeView; } /** * 三層樹結構中的第二層是一個ExpandableListView */ public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { // 是 final ExpandableListView treeView = getExpandableListView(); final TreeViewAdapter treeViewAdapter = new TreeViewAdapter( this.parentContext, 0); // 臨時變量取得TreeViewAdapter的TreeNode集合,可爲空 List<TreeNode> tmp = treeViewAdapter.getTreeNode(); final TreeNode treeNode = (TreeNode) getChild(groupPosition, childPosition); tmp.add(treeNode); treeViewAdapter.updateTreeNode(tmp); treeView.setAdapter(treeViewAdapter); // 取得選中的二級樹形菜單的父子節點,結果返回給外部回調函數 treeView.setOnChildClickListener(this.stvClickEvent); /** * 第二級菜單展開時通過取得節點數來設置第三級菜單的大小 */ treeView.setOnGroupExpandListener(new OnGroupExpandListener() { @Override public void onGroupExpand(int groupPosition) { AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, (treeNode.childs .size() + 1) * TreeViewAdapter.ItemHeight + 0); treeView.setLayoutParams(lp); } }); /** * 第二級菜單回收時設置爲標準Item大小 */ treeView.setOnGroupCollapseListener(new OnGroupCollapseListener() { @Override public void onGroupCollapse(int groupPosition) { AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, TreeViewAdapter.ItemHeight); treeView.setLayoutParams(lp); } }); treeView.setPadding(TreeViewAdapter.PaddingLeft * 2, 0, 0, 0); return treeView; } /** * 三級樹結構中的首層是TextView,用於作爲title */ public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { TextView textView = TreeViewAdapter.getTextView(this.parentContext); textView.setText(getGroup(groupPosition).toString()); // 設置首層menu標題背景 textView.setBackgroundResource(R.drawable.menu_category); textView.setPadding(TreeViewAdapter.PaddingLeft * 2, 0, 0, 0); return textView; }
效果圖:
完整代碼下載地址
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持神馬文庫。