本文转自:http://lovezhou.iteye.com/blog/848744

ExpandableList 是折叠列表,通过继承ExpandableListActivity 类就可以非常简单的实现折叠列表。
效果图:


代码实现
Java代码
  1. packagecom.zhou.activity;
  2. importandroid.app.ExpandableListActivity;
  3. importandroid.os.Bundle;
  4. importandroid.view.ContextMenu;
  5. importandroid.view.Gravity;
  6. importandroid.view.MenuItem;
  7. importandroid.view.View;
  8. importandroid.view.ViewGroup;
  9. importandroid.view.ContextMenu.ContextMenuInfo;
  10. importandroid.widget.AbsListView;
  11. importandroid.widget.BaseExpandableListAdapter;
  12. importandroid.widget.ExpandableListAdapter;
  13. importandroid.widget.ExpandableListView;
  14. importandroid.widget.TextView;
  15. importandroid.widget.Toast;
  16. importandroid.widget.ExpandableListView.ExpandableListContextMenuInfo;
  17. publicclassExpandableListextendsExpandableListActivity{
  18. //声明adapter
  19. privateExpandableListAdaptermAdapter;
  20. @Override
  21. protectedvoidonCreate(BundlesavedInstanceState){
  22. super.onCreate(savedInstanceState);
  23. //设这标题
  24. setTitle("可扩展的列表");
  25. //实例化adapter
  26. mAdapter=newMyExpandableListAdapter();
  27. //为列表设置adapter
  28. setListAdapter(mAdapter);
  29. //为list注册context菜单
  30. registerForContextMenu(this.getExpandableListView());
  31. }
  32. @Override
  33. publicbooleanonChildClick(ExpandableListViewparent,Viewv,
  34. intgroupPosition,intchildPosition,longid){
  35. Toast.makeText(this,"组元素索引:"+groupPosition+"子元素索引:"+childPosition,Toast.LENGTH_SHORT).show();
  36. returnsuper.onChildClick(parent,v,groupPosition,childPosition,id);
  37. }
  38. @Override
  39. publicvoidonGroupExpand(intgroupPosition){
  40. Toast.makeText(this,"组元素索引:"+groupPosition,Toast.LENGTH_SHORT).show();
  41. super.onGroupExpand(groupPosition);
  42. }
  43. @Override
  44. publicvoidonCreateContextMenu(ContextMenumenu,Viewv,
  45. ContextMenuInfomenuInfo){
  46. menu.setHeaderTitle("上下文菜单");
  47. menu.add(0,0,0,"单击我");
  48. }
  49. //单击上下文菜单后的逻辑
  50. @Override
  51. publicbooleanonContextItemSelected(MenuItemitem){
  52. ExpandableListContextMenuInfoinfo=(ExpandableListContextMenuInfo)item.getMenuInfo();
  53. Stringtitle=((TextView)info.targetView).getText().toString();
  54. inttype=ExpandableListView.getPackedPositionType(info.packedPosition);
  55. if(type==ExpandableListView.PACKED_POSITION_TYPE_CHILD){
  56. intgroupPos=ExpandableListView.getPackedPositionGroup(info.packedPosition);
  57. intchildPos=ExpandableListView.getPackedPositionChild(info.packedPosition);
  58. Toast.makeText(this,title+"组元素索引:"+groupPos+"子元素索引:"+childPos,Toast.LENGTH_SHORT).show();
  59. returntrue;
  60. }elseif(type==ExpandableListView.PACKED_POSITION_TYPE_GROUP){
  61. intgroupPos=ExpandableListView.getPackedPositionGroup(info.packedPosition);
  62. Toast.makeText(this,title+"组元素索引:"+groupPos,Toast.LENGTH_SHORT).show();
  63. returntrue;
  64. }
  65. returnfalse;
  66. }
  67. //自定义Adapter
  68. publicclassMyExpandableListAdapterextendsBaseExpandableListAdapter{
  69. //父列表数据
  70. privateString[]groups=
  71. {
  72. "吉林省",
  73. "辽宁省",
  74. "黑龙江省",
  75. "山东省"
  76. };
  77. //子列表数据
  78. privateString[][]children=
  79. {
  80. {"长春市"},
  81. {"沈阳市","铁岭市"},
  82. {"哈尔滨市","齐齐哈尔市","牡丹江市"},
  83. {"济南市","青岛市","淄博市","潍坊市"}
  84. };
  85. @Override
  86. publicObjectgetChild(intgroupPosition,intchildPosition){
  87. returnchildren[groupPosition][childPosition];
  88. }
  89. @Override
  90. publiclonggetChildId(intgroupPosition,intchildPosition){
  91. returnchildPosition;
  92. }
  93. @Override
  94. publicintgetChildrenCount(intgroupPosition){
  95. returnchildren[groupPosition].length;
  96. }
  97. //取子列表中的某一项的View
  98. @Override
  99. publicViewgetChildView(intgroupPosition,intchildPosition,
  100. booleanisLastChild,ViewconvertView,ViewGroupparent){
  101. TextViewtextView=getGenericView();
  102. textView.setText(getChild(groupPosition,childPosition).toString());
  103. returntextView;
  104. }
  105. @Override
  106. publicObjectgetGroup(intgroupPosition){
  107. returngroups[groupPosition];
  108. }
  109. @Override
  110. publicintgetGroupCount(){
  111. returngroups.length;
  112. }
  113. @Override
  114. publiclonggetGroupId(intgroupPosition){
  115. returngroupPosition;
  116. }
  117. //取父列表中的某一项的View
  118. @Override
  119. publicViewgetGroupView(intgroupPosition,booleanisExpanded,
  120. ViewconvertView,ViewGroupparent){
  121. TextViewtextView=getGenericView();
  122. textView.setText(getGroup(groupPosition).toString());
  123. returntextView;
  124. }
  125. @Override
  126. publicbooleanhasStableIds(){
  127. returntrue;
  128. }
  129. @Override
  130. publicbooleanisChildSelectable(intgroupPosition,intchildPosition){
  131. returntrue;
  132. }
  133. //获取某一项的View的逻辑
  134. privateTextViewgetGenericView(){
  135. AbsListView.LayoutParamslp=newAbsListView.LayoutParams(
  136. ViewGroup.LayoutParams.FILL_PARENT,48);
  137. TextViewtextView=newTextView(ExpandableList.this);
  138. textView.setLayoutParams(lp);
  139. textView.setGravity(Gravity.CENTER_VERTICAL|Gravity.LEFT);
  140. textView.setPadding(32,0,0,0);
  141. returntextView;
  142. }
  143. }
  144. }
package com.zhou.activity;import android.app.ExpandableListActivity;import android.os.Bundle;import android.view.ContextMenu;import android.view.Gravity;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.view.ContextMenu.ContextMenuInfo;import android.widget.AbsListView;import android.widget.BaseExpandableListAdapter;import android.widget.ExpandableListAdapter;import android.widget.ExpandableListView;import android.widget.TextView;import android.widget.Toast;import android.widget.ExpandableListView.ExpandableListContextMenuInfo;public class ExpandableList extends ExpandableListActivity {//声明adapterprivate ExpandableListAdapter mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//设这标题setTitle("可扩展的列表");//实例化adaptermAdapter = new MyExpandableListAdapter();//为列表设置adaptersetListAdapter(mAdapter);//为list注册context菜单registerForContextMenu(this.getExpandableListView());}@Overridepublic boolean onChildClick(ExpandableListView parent, View v,int groupPosition, int childPosition, long id) {Toast.makeText(this, " 组元素索引: " + groupPosition + " 子元素索引: " + childPosition, Toast.LENGTH_SHORT).show();return super.onChildClick(parent, v, groupPosition, childPosition, id);}@Overridepublic void onGroupExpand(int groupPosition) {Toast.makeText(this, " 组元素索引: " + groupPosition, Toast.LENGTH_SHORT).show();super.onGroupExpand(groupPosition);}@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {menu.setHeaderTitle("上下文菜单");menu.add(0, 0, 0, "单击我");}// 单击上下文菜单后的逻辑@Overridepublic boolean onContextItemSelected(MenuItem item) {ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();String title = ((TextView) info.targetView).getText().toString();int type = ExpandableListView.getPackedPositionType(info.packedPosition);if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);Toast.makeText(this, title + " 组元素索引: " + groupPos + " 子元素索引: " + childPos, Toast.LENGTH_SHORT).show();return true;} else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);Toast.makeText(this, title + " 组元素索引: " + groupPos, Toast.LENGTH_SHORT).show();return true;}return false;}//自定义Adapterpublic class MyExpandableListAdapter extends BaseExpandableListAdapter {// 父列表数据private String[] groups = { "吉林省", "辽宁省", "黑龙江省","山东省" };// 子列表数据private String[][] children = {{ "长春市" },{ "沈阳市", "铁岭市" },{ "哈尔滨市", "齐齐哈尔市", "牡丹江市" },{ "济南市", "青岛市", "淄博市", "潍坊市" }};@Overridepublic Object getChild(int groupPosition, int childPosition) {return children[groupPosition][childPosition];}@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}@Overridepublic int getChildrenCount(int groupPosition) {return children[groupPosition].length;}// 取子列表中的某一项的 View@Overridepublic View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {TextView textView = getGenericView();textView.setText(getChild(groupPosition, childPosition).toString());return textView;}@Overridepublic Object getGroup(int groupPosition) {return groups[groupPosition];}@Overridepublic int getGroupCount() {return groups.length;}@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}// 取父列表中的某一项的 View@Overridepublic View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {TextView textView = getGenericView();textView.setText(getGroup(groupPosition).toString());return textView;}@Overridepublic boolean hasStableIds() {return true;}@Overridepublic boolean isChildSelectable(int groupPosition, int childPosition) {return true;}// 获取某一项的 View 的逻辑private TextView getGenericView() {AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 48);TextView textView = new TextView(ExpandableList.this);textView.setLayoutParams(lp);textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);textView.setPadding(32, 0, 0, 0);return textView;}}}
  • 大小: 17.2 KB
  • ExpandableList.rar (44.9 KB)
  • 下载次数: 368

更多相关文章

  1. Android(安卓)高仿QQ 好友分组列表
  2. android checkbox多选框实现
  3. Opengrok环境搭建--阅读Android源码
  4. Android杂一
  5. Android(安卓)代码片段
  6. Android的postOnAnimation分析
  7. 【Android】树形菜单、扩展下拉菜单BaseExpandableListAdapter、
  8. android获取应用列表
  9. Android(安卓)Touch事件

随机推荐

  1. SeekBar自定义样式
  2. Android 一些注意
  3. 探索Android中的Parcel
  4. android 开发环境安装和测试中常出现的问
  5. Android读取JSON格式数据
  6. androidUI控件
  7. Android.PublishApplication
  8. Android ViewPager实现Tabhost选项卡底部
  9. Android 应用程序获得版本号
  10. Android通过Http连接MySQL 实现登陆/注册