/** 三层树结构中的第二层是一个ExpandableListView */ public View getChildView( int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { // 是 final ExpandableListView treeView = getExpandableListView(); final ThreeViewAdapter treeViewAdapter = new ThreeViewAdapter(this.parentContext, 0); List<ThreeViewAdapter.TreeNode> tmp = treeViewAdapter.GetTreeNode(); // 临时变量取得TreeViewAdapter的TreeNode集合,可为空 final ThreeViewAdapter.TreeNode treeNode = (ThreeViewAdapter.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) * ThreeViewAdapter.ItemHeight + 10); treeView.setLayoutParams(lp); } }); /** 第二级菜单回收时设置为标准Item大小 */ treeView.setOnGroupCollapseListener( new OnGroupCollapseListener() { @Override public void onGroupCollapse(int groupPosition) { AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, ThreeViewAdapter.ItemHeight); treeView.setLayoutParams(lp); } }); treeView.setPadding(ThreeViewAdapter.PaddingLeft, 0, 0, 0); return treeView; }
/** 三级树结构中的首层是TextView,用于作为title */ public View getGroupView( int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { TextView textView = ThreeViewAdapter.getTextView(this.parentContext); textView.setText(getGroup(groupPosition).toString()); textView.setPadding(ThreeViewAdapter.PaddingLeft, 0, 0, 0); return textView; }