本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!

在Android里要实现树形菜单,都是用ExpandableList(也有高手自己继承ListView或者LinearLayout来做),但是ExpandableList一般只能实现2级树形菜单......本文也依然使用ExpandableList,但是要实现的是3级树形菜单。本文程序运行效果图:

当用BaseExpandableListAdapter来实现二级树形菜单时,父项(getGroupView())和子项(getChildView())都是使用TextView。当要实现三级树形菜单时,子项(getChildView())就必须使用ExpandableList了.......另外还要定义结构体来方便调用三级树形的数据,二级树形菜单可以用如下:

view plain copy to clipboard print ?
  1. staticpublicclassTreeNode{
  2. Objectparent;
  3. List<Object>childs=newArrayList<Object>();
  4. }
static public class TreeNode{ Object parent; List<Object> childs=new ArrayList<Object>(); }

三级树形菜单可以用如下,子项是二级树形菜单的结构体:

view plain copy to clipboard print ?
  1. staticpublicclassSuperTreeNode{
  2. Objectparent;
  3. //二级树形菜单的结构体
  4. List<TreeViewAdapter.TreeNode>childs=newArrayList<TreeViewAdapter.TreeNode>();
  5. }
static public class SuperTreeNode { Object parent; //二级树形菜单的结构体 List<TreeViewAdapter.TreeNode> childs = new ArrayList<TreeViewAdapter.TreeNode>(); }

实现三级树形菜单有两点要注意的:

1、第二级也是个树形菜单,因此必须在第二级项目展开/回收时设置足够的空间来完全显示二级树形菜单;

2、在实现三级树形菜单时,发现菜单的方法都是用不了(如OnChildClickListener、OnGroupClickListener等),因此要获得选中的数据就必须在外部定义好回调函数,然后在第二级生成二级树形菜单时回调这个外部函数。

PS:本文在解决No.2关键点的时候,只能取得第三级选中的序号.....而第一,第二级依然无法获取其序号。

main.xml源码如下:

view plain copy to clipboard print ?
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"android:layout_width="fill_parent"
  4. android:layout_height="fill_parent">
  5. <LinearLayoutandroid:id="@+id/LinearLayout01"
  6. android:layout_width="wrap_content"android:layout_height="wrap_content">
  7. <Buttonandroid:layout_height="wrap_content"android:text="两层结构"
  8. android:layout_width="160dip"android:id="@+id/btnNormal"></Button>
  9. <Buttonandroid:layout_height="wrap_content"android:text="三层结构"
  10. android:layout_width="160dip"android:id="@+id/btnSuper"></Button>
  11. </LinearLayout>
  12. <ExpandableListViewandroid:id="@+id/ExpandableListView01"
  13. android:layout_width="fill_parent"android:layout_height="fill_parent"></ExpandableListView>
  14. </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:id="@+id/LinearLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:layout_height="wrap_content" android:text="两层结构" android:layout_width="160dip" android:id="@+id/btnNormal"></Button> <Button android:layout_height="wrap_content" android:text="三层结构" android:layout_width="160dip" android:id="@+id/btnSuper"></Button> </LinearLayout> <ExpandableListView android:id="@+id/ExpandableListView01" android:layout_width="fill_parent" android:layout_height="fill_parent"></ExpandableListView> </LinearLayout>

testExpandableList.java是主类,调用其他工具类,源码如下:

view plain copy to clipboard print ?
  1. packagecom.testExpandableList;
  2. importjava.util.List;
  3. importandroid.app.Activity;
  4. importandroid.os.Bundle;
  5. importandroid.util.Log;
  6. importandroid.view.View;
  7. importandroid.widget.Button;
  8. importandroid.widget.ExpandableListView;
  9. importandroid.widget.ExpandableListView.OnChildClickListener;
  10. importandroid.widget.Toast;
  11. publicclasstestExpandableListextendsActivity{
  12. /**Calledwhentheactivityisfirstcreated.*/
  13. ExpandableListViewexpandableList;
  14. TreeViewAdapteradapter;
  15. SuperTreeViewAdaptersuperAdapter;
  16. ButtonbtnNormal,btnSuper;
  17. //Sampledataset.children[i]containsthechildren(String[])forgroups[i].
  18. publicString[]groups={"xxxx好友","xxxx同学","xxxxx女人"};
  19. publicString[][]child={
  20. {"A君","B君","C君","D君"},
  21. {"同学甲","同学乙","同学丙"},
  22. {"御姐","萝莉"}
  23. };
  24. publicString[]parent={"xxxx好友","xxxx同学"};
  25. publicString[][][]child_grandson={
  26. {{"A君"},
  27. {"AA","AAA"}},
  28. {{"B君"},
  29. {"BBB","BBBB","BBBBB"}},
  30. {{"C君"},
  31. {"CCC","CCCC"}},
  32. {{"D君"},
  33. {"DDD","DDDD","DDDDD"}},
  34. };
  35. @Override
  36. publicvoidonCreate(BundlesavedInstanceState){
  37. super.onCreate(savedInstanceState);
  38. setContentView(R.layout.main);
  39. this.setTitle("ExpandableListView练习----hellogv");
  40. btnNormal=(Button)this.findViewById(R.id.btnNormal);
  41. btnNormal.setOnClickListener(newClickEvent());
  42. btnSuper=(Button)this.findViewById(R.id.btnSuper);
  43. btnSuper.setOnClickListener(newClickEvent());
  44. adapter=newTreeViewAdapter(this,TreeViewAdapter.PaddingLeft>>1);
  45. superAdapter=newSuperTreeViewAdapter(this,stvClickEvent);
  46. expandableList=(ExpandableListView)testExpandableList.this.findViewById(R.id.ExpandableListView01);
  47. }
  48. classClickEventimplementsView.OnClickListener{
  49. @Override
  50. publicvoidonClick(Viewv){
  51. adapter.RemoveAll();
  52. adapter.notifyDataSetChanged();
  53. superAdapter.RemoveAll();
  54. superAdapter.notifyDataSetChanged();
  55. if(v==btnNormal)
  56. {
  57. List<TreeViewAdapter.TreeNode>treeNode=adapter.GetTreeNode();
  58. for(inti=0;i<groups.length;i++)
  59. {
  60. TreeViewAdapter.TreeNodenode=newTreeViewAdapter.TreeNode();
  61. node.parent=groups[i];
  62. for(intii=0;ii<child[i].length;ii++)
  63. {
  64. node.childs.add(child[i][ii]);
  65. }
  66. treeNode.add(node);
  67. }
  68. adapter.UpdateTreeNode(treeNode);
  69. expandableList.setAdapter(adapter);
  70. expandableList.setOnChildClickListener(newOnChildClickListener(){
  71. @Override
  72. publicbooleanonChildClick(ExpandableListViewarg0,Viewarg1,
  73. intparent,intchildren,longarg4){
  74. Stringstr="parentid:"+String.valueOf(parent)+",childrenid:"+String.valueOf(children);
  75. Toast.makeText(testExpandableList.this,str,300).show();
  76. returnfalse;
  77. }
  78. });
  79. }
  80. elseif(v==btnSuper){
  81. List<SuperTreeViewAdapter.SuperTreeNode>superTreeNode=superAdapter.GetTreeNode();
  82. for(inti=0;i<parent.length;i++)//第一层
  83. {
  84. SuperTreeViewAdapter.SuperTreeNodesuperNode=newSuperTreeViewAdapter.SuperTreeNode();
  85. superNode.parent=parent[i];
  86. //第二层
  87. for(intii=0;ii<child_grandson.length;ii++)
  88. {
  89. TreeViewAdapter.TreeNodenode=newTreeViewAdapter.TreeNode();
  90. node.parent=child_grandson[ii][0][0];//第二级菜单的标题
  91. for(intiii=0;iii<child_grandson[ii][1].length;iii++)//第三级菜单
  92. {
  93. node.childs.add(child_grandson[ii][1][iii]);
  94. }
  95. superNode.childs.add(node);
  96. }
  97. superTreeNode.add(superNode);
  98. }
  99. superAdapter.UpdateTreeNode(superTreeNode);
  100. expandableList.setAdapter(superAdapter);
  101. }
  102. }
  103. }
  104. /**
  105. *三级树形菜单的事件不再可用,本函数由三级树形菜单的子项(二级菜单)进行回调
  106. */
  107. OnChildClickListenerstvClickEvent=newOnChildClickListener(){
  108. @Override
  109. publicbooleanonChildClick(ExpandableListViewparent,
  110. Viewv,intgroupPosition,intchildPosition,
  111. longid){
  112. Stringstr="parentid:"+String.valueOf(groupPosition)+",childrenid:"+String.valueOf(childPosition);
  113. Toast.makeText(testExpandableList.this,str,300).show();
  114. returnfalse;
  115. }
  116. };
  117. }
package com.testExpandableList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; import android.widget.Toast; public class testExpandableList extends Activity { /** Called when the activity is first created. */ ExpandableListView expandableList; TreeViewAdapter adapter; SuperTreeViewAdapter superAdapter; Button btnNormal,btnSuper; // Sample data set. children[i] contains the children (String[]) for groups[i]. public String[] groups = { "xxxx好友", "xxxx同学", "xxxxx女人"}; public String[][] child= { { "A君", "B君", "C君", "D君" }, { "同学甲", "同学乙", "同学丙"}, { "御姐", "萝莉" } }; public String[] parent = { "xxxx好友", "xxxx同学"}; public String[][][] child_grandson= { {{"A君"}, {"AA","AAA"}}, {{"B君"}, {"BBB","BBBB","BBBBB"}}, {{"C君"}, {"CCC","CCCC"}}, {{"D君"}, {"DDD","DDDD","DDDDD"}}, }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.setTitle("ExpandableListView练习----hellogv"); btnNormal=(Button)this.findViewById(R.id.btnNormal); btnNormal.setOnClickListener(new ClickEvent()); btnSuper=(Button)this.findViewById(R.id.btnSuper); btnSuper.setOnClickListener(new ClickEvent()); adapter=new TreeViewAdapter(this,TreeViewAdapter.PaddingLeft>>1); superAdapter=new SuperTreeViewAdapter(this,stvClickEvent); expandableList=(ExpandableListView) testExpandableList.this.findViewById(R.id.ExpandableListView01); } class ClickEvent implements View.OnClickListener{ @Override public void onClick(View v) { adapter.RemoveAll(); adapter.notifyDataSetChanged(); superAdapter.RemoveAll(); superAdapter.notifyDataSetChanged(); if(v==btnNormal) { List<TreeViewAdapter.TreeNode> treeNode = adapter.GetTreeNode(); for(int i=0;i<groups.length;i++) { TreeViewAdapter.TreeNode node=new TreeViewAdapter.TreeNode(); node.parent=groups[i]; for(int ii=0;ii<child[i].length;ii++) { node.childs.add(child[i][ii]); } treeNode.add(node); } adapter.UpdateTreeNode(treeNode); expandableList.setAdapter(adapter); expandableList.setOnChildClickListener(new OnChildClickListener(){ @Override public boolean onChildClick(ExpandableListView arg0, View arg1, int parent, int children, long arg4) { String str="parent id:"+String.valueOf(parent)+",children id:"+String.valueOf(children); Toast.makeText(testExpandableList.this, str, 300).show(); return false; } }); } else if(v==btnSuper){ List<SuperTreeViewAdapter.SuperTreeNode> superTreeNode = superAdapter.GetTreeNode(); for(int i=0;i<parent.length;i++)//第一层 { SuperTreeViewAdapter.SuperTreeNode superNode=new SuperTreeViewAdapter.SuperTreeNode(); superNode.parent=parent[i]; //第二层 for(int ii=0;ii<child_grandson.length;ii++) { TreeViewAdapter.TreeNode node=new TreeViewAdapter.TreeNode(); node.parent=child_grandson[ii][0][0];//第二级菜单的标题 for(int iii=0;iii<child_grandson[ii][1].length;iii++)//第三级菜单 { node.childs.add(child_grandson[ii][1][iii]); } superNode.childs.add(node); } superTreeNode.add(superNode); } superAdapter.UpdateTreeNode(superTreeNode); expandableList.setAdapter(superAdapter); } } } /** * 三级树形菜单的事件不再可用,本函数由三级树形菜单的子项(二级菜单)进行回调 */ OnChildClickListener stvClickEvent=new OnChildClickListener(){ @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { String str="parent id:"+String.valueOf(groupPosition)+",children id:"+String.valueOf(childPosition); Toast.makeText(testExpandableList.this, str, 300).show(); return false; } }; }

TreeViewAdapter.java是实现二级树形菜单的工具类,源码如下:

view plain copy to clipboard print ?
  1. packagecom.testExpandableList;
  2. importjava.util.ArrayList;
  3. importjava.util.List;
  4. importandroid.content.Context;
  5. importandroid.util.Log;
  6. importandroid.view.Gravity;
  7. importandroid.view.View;
  8. importandroid.view.ViewGroup;
  9. importandroid.widget.AbsListView;
  10. importandroid.widget.BaseExpandableListAdapter;
  11. importandroid.widget.TextView;
  12. publicclassTreeViewAdapterextendsBaseExpandableListAdapter{
  13. publicstaticfinalintItemHeight=48;//每项的高度
  14. publicstaticfinalintPaddingLeft=36;//每项的高度
  15. privateintmyPaddingLeft=0;//如果是由SuperTreeView调用,则作为子项需要往右移
  16. staticpublicclassTreeNode{
  17. Objectparent;
  18. List<Object>childs=newArrayList<Object>();
  19. }
  20. List<TreeNode>treeNodes=newArrayList<TreeNode>();
  21. ContextparentContext;
  22. publicTreeViewAdapter(Contextview,intmyPaddingLeft)
  23. {
  24. parentContext=view;
  25. this.myPaddingLeft=myPaddingLeft;
  26. }
  27. publicList<TreeNode>GetTreeNode()
  28. {
  29. returntreeNodes;
  30. }
  31. publicvoidUpdateTreeNode(List<TreeNode>nodes)
  32. {
  33. treeNodes=nodes;
  34. }
  35. publicvoidRemoveAll()
  36. {
  37. treeNodes.clear();
  38. }
  39. publicObjectgetChild(intgroupPosition,intchildPosition){
  40. returntreeNodes.get(groupPosition).childs.get(childPosition);
  41. }
  42. publicintgetChildrenCount(intgroupPosition){
  43. returntreeNodes.get(groupPosition).childs.size();
  44. }
  45. staticpublicTextViewgetTextView(Contextcontext){
  46. AbsListView.LayoutParamslp=newAbsListView.LayoutParams(
  47. ViewGroup.LayoutParams.FILL_PARENT,ItemHeight);
  48. TextViewtextView=newTextView(context);
  49. textView.setLayoutParams(lp);
  50. textView.setGravity(Gravity.CENTER_VERTICAL|Gravity.LEFT);
  51. returntextView;
  52. }
  53. publicViewgetChildView(intgroupPosition,intchildPosition,
  54. booleanisLastChild,ViewconvertView,ViewGroupparent){
  55. TextViewtextView=getTextView(this.parentContext);
  56. textView.setText(getChild(groupPosition,childPosition).toString());
  57. textView.setPadding(myPaddingLeft+PaddingLeft,0,0,0);
  58. returntextView;
  59. }
  60. publicViewgetGroupView(intgroupPosition,booleanisExpanded,
  61. ViewconvertView,ViewGroupparent){
  62. TextViewtextView=getTextView(this.parentContext);
  63. textView.setText(getGroup(groupPosition).toString());
  64. textView.setPadding(myPaddingLeft+(PaddingLeft>>1),0,0,0);
  65. returntextView;
  66. }
  67. publiclonggetChildId(intgroupPosition,intchildPosition){
  68. returnchildPosition;
  69. }
  70. publicObjectgetGroup(intgroupPosition){
  71. returntreeNodes.get(groupPosition).parent;
  72. }
  73. publicintgetGroupCount(){
  74. returntreeNodes.size();
  75. }
  76. publiclonggetGroupId(intgroupPosition){
  77. returngroupPosition;
  78. }
  79. publicbooleanisChildSelectable(intgroupPosition,intchildPosition){
  80. returntrue;
  81. }
  82. publicbooleanhasStableIds(){
  83. returntrue;
  84. }
  85. }
package com.testExpandableList; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseExpandableListAdapter; import android.widget.TextView; public class TreeViewAdapter extends BaseExpandableListAdapter{ public static final int ItemHeight=48;//每项的高度 public static final int PaddingLeft=36;//每项的高度 private int myPaddingLeft=0;//如果是由SuperTreeView调用,则作为子项需要往右移 static public class TreeNode{ Object parent; List<Object> childs=new ArrayList<Object>(); } List<TreeNode> treeNodes = new ArrayList<TreeNode>(); Context parentContext; public TreeViewAdapter(Context view,int myPaddingLeft) { parentContext=view; this.myPaddingLeft=myPaddingLeft; } public List<TreeNode> GetTreeNode() { return treeNodes; } public void UpdateTreeNode(List<TreeNode> nodes) { treeNodes=nodes; } public void RemoveAll() { treeNodes.clear(); } public Object getChild(int groupPosition, int childPosition) { return treeNodes.get(groupPosition).childs.get(childPosition); } public int getChildrenCount(int groupPosition) { return treeNodes.get(groupPosition).childs.size(); } static public TextView getTextView(Context context) { AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, ItemHeight); TextView textView = new TextView(context); textView.setLayoutParams(lp); textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); return textView; } public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { TextView textView = getTextView(this.parentContext); textView.setText(getChild(groupPosition, childPosition).toString()); textView.setPadding(myPaddingLeft+PaddingLeft, 0, 0, 0); return textView; } public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { TextView textView = getTextView(this.parentContext); textView.setText(getGroup(groupPosition).toString()); textView.setPadding(myPaddingLeft+(PaddingLeft>>1), 0, 0, 0); return textView; } public long getChildId(int groupPosition, int childPosition) { return childPosition; } public Object getGroup(int groupPosition) { return treeNodes.get(groupPosition).parent; } public int getGroupCount() { return treeNodes.size(); } public long getGroupId(int groupPosition) { return groupPosition; } public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } public boolean hasStableIds() { return true; } }

SuperTreeViewAdapter.java是实现三级树形菜单的工具类,会用到TreeViewAdapter.java,源码如下:

view plain copy to clipboard print ?
  1. packagecom.testExpandableList;
  2. importjava.util.ArrayList;
  3. importjava.util.List;
  4. importcom.testExpandableList.TreeViewAdapter.TreeNode;
  5. importandroid.content.Context;
  6. importandroid.view.View;
  7. importandroid.view.ViewGroup;
  8. importandroid.widget.AbsListView;
  9. importandroid.widget.BaseExpandableListAdapter;
  10. importandroid.widget.ExpandableListView;
  11. importandroid.widget.ExpandableListView.OnChildClickListener;
  12. importandroid.widget.ExpandableListView.OnGroupCollapseListener;
  13. importandroid.widget.ExpandableListView.OnGroupExpandListener;
  14. importandroid.widget.TextView;
  15. publicclassSuperTreeViewAdapterextendsBaseExpandableListAdapter{
  16. staticpublicclassSuperTreeNode{
  17. Objectparent;
  18. //二级树形菜单的结构体
  19. List<TreeViewAdapter.TreeNode>childs=newArrayList<TreeViewAdapter.TreeNode>();
  20. }
  21. privateList<SuperTreeNode>superTreeNodes=newArrayList<SuperTreeNode>();
  22. privateContextparentContext;
  23. privateOnChildClickListenerstvClickEvent;//外部回调函数
  24. publicSuperTreeViewAdapter(Contextview,OnChildClickListenerstvClickEvent){
  25. parentContext=view;
  26. this.stvClickEvent=stvClickEvent;
  27. }
  28. publicList<SuperTreeNode>GetTreeNode(){
  29. returnsuperTreeNodes;
  30. }
  31. publicvoidUpdateTreeNode(List<SuperTreeNode>node){
  32. superTreeNodes=node;
  33. }
  34. publicvoidRemoveAll()
  35. {
  36. superTreeNodes.clear();
  37. }
  38. publicObjectgetChild(intgroupPosition,intchildPosition){
  39. returnsuperTreeNodes.get(groupPosition).childs.get(childPosition);
  40. }
  41. publicintgetChildrenCount(intgroupPosition){
  42. returnsuperTreeNodes.get(groupPosition).childs.size();
  43. }
  44. publicExpandableListViewgetExpandableListView(){
  45. AbsListView.LayoutParamslp=newAbsListView.LayoutParams(
  46. ViewGroup.LayoutParams.FILL_PARENT,TreeViewAdapter.ItemHeight);
  47. ExpandableListViewsuperTreeView=newExpandableListView(parentContext);
  48. superTreeView.setLayoutParams(lp);
  49. returnsuperTreeView;
  50. }
  51. /**
  52. *三层树结构中的第二层是一个ExpandableListView
  53. */
  54. publicViewgetChildView(intgroupPosition,intchildPosition,
  55. booleanisLastChild,ViewconvertView,ViewGroupparent){
  56. //是
  57. finalExpandableListViewtreeView=getExpandableListView();
  58. finalTreeViewAdaptertreeViewAdapter=newTreeViewAdapter(this.parentContext,0);
  59. List<TreeNode>tmp=treeViewAdapter.GetTreeNode();//临时变量取得TreeViewAdapter的TreeNode集合,可为空
  60. finalTreeNodetreeNode=(TreeNode)getChild(groupPosition,childPosition);
  61. tmp.add(treeNode);
  62. treeViewAdapter.UpdateTreeNode(tmp);
  63. treeView.setAdapter(treeViewAdapter);
  64. //关键点:取得选中的二级树形菜单的父子节点,结果返回给外部回调函数
  65. treeView.setOnChildClickListener(this.stvClickEvent);
  66. /**
  67. *关键点:第二级菜单展开时通过取得节点数来设置第三级菜单的大小
  68. */
  69. treeView.setOnGroupExpandListener(newOnGroupExpandListener(){
  70. @Override
  71. publicvoidonGroupExpand(intgroupPosition){
  72. AbsListView.LayoutParamslp=newAbsListView.LayoutParams(
  73. ViewGroup.LayoutParams.FILL_PARENT,
  74. (treeNode.childs.size()+1)*TreeViewAdapter.ItemHeight+10);
  75. treeView.setLayoutParams(lp);
  76. }
  77. });
  78. /**
  79. *第二级菜单回收时设置为标准Item大小
  80. */
  81. treeView.setOnGroupCollapseListener(newOnGroupCollapseListener(){
  82. @Override
  83. publicvoidonGroupCollapse(intgroupPosition){
  84. AbsListView.LayoutParamslp=newAbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
  85. TreeViewAdapter.ItemHeight);
  86. treeView.setLayoutParams(lp);
  87. }
  88. });
  89. treeView.setPadding(TreeViewAdapter.PaddingLeft,0,0,0);
  90. returntreeView;
  91. }
  92. /**
  93. *三级树结构中的首层是TextView,用于作为title
  94. */
  95. publicViewgetGroupView(intgroupPosition,booleanisExpanded,
  96. ViewconvertView,ViewGroupparent){
  97. TextViewtextView=TreeViewAdapter.getTextView(this.parentContext);
  98. textView.setText(getGroup(groupPosition).toString());
  99. textView.setPadding(TreeViewAdapter.PaddingLeft,0,0,0);
  100. returntextView;
  101. }
  102. publiclonggetChildId(intgroupPosition,intchildPosition){
  103. returnchildPosition;
  104. }
  105. publicObjectgetGroup(intgroupPosition){
  106. returnsuperTreeNodes.get(groupPosition).parent;
  107. }
  108. publicintgetGroupCount(){
  109. returnsuperTreeNodes.size();
  110. }
  111. publiclonggetGroupId(intgroupPosition){
  112. returngroupPosition;
  113. }
  114. publicbooleanisChildSelectable(intgroupPosition,intchildPosition){
  115. returntrue;
  116. }
  117. publicbooleanhasStableIds(){
  118. returntrue;
  119. }
  120. }

更多相关文章

  1. Android(安卓)弹出菜单(类iOS UIMenuController) 气泡菜单
  2. Android简明开发教程十三:Option Menu 画笔示例
  3. Android(安卓)博客园客户端 (七)登录功能
  4. Android(安卓)MediaPlayer 分析 - service端文件结构
  5. android移除数据
  6. Android(安卓)Widget:DrawerLayout配合Toolbar的使用及常见问题
  7. [Android] Volley源码分析(一)体系结构
  8. Android四种菜单的使用
  9. Android(安卓)菜单开发和视图处理

随机推荐

  1. android 模拟器 得到GPS
  2. Android特色开发(5):账户管理
  3. 关于Android WebView上传文件的解决方案
  4. Android ProgressBar 进度条
  5. Android(安卓)开发篇一(安装环境搭建)
  6. android imageUtil
  7. Android应用程序在手机上运行的步骤
  8. The Android Versions History : Cupcake
  9. Android studio 3.0和unity交互 Manifest
  10. Android Studio & HTTP Proxy