本文采用一个Demo来展示Android中ExpandableListView控件的使用,如如何在组/子ListView中绑定数据源。直接上代码如下:

程序结构图:

layout目录下的 main.xml 文件源码如下:

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent">
  6. <!--我们会自己定义listview的显示方式(在另外一个布局文件里边)不用默认的方式
  7. 如果自定义listview的显示方式这里这个android:id="@id/android:list"必须这样写-->
  8. <!--android:drawSelectOnTop="false"此属性用来设置listview上的背景颜色会不会
  9. 挡住(覆盖)内容,如果这是为false就表示不会覆盖掉-->
  10. <ExpandableListView
  11. android:id="@id/android:list"
  12. android:layout_width="fill_parent"
  13. android:layout_height="wrap_content"
  14. android:layout_weight="1"
  15. android:drawSelectorOnTop="false"/>
  16. </LinearLayout>


包 com.andyidea.demo中ContactsActivity.java源码如下:

[html] view plain copy
  1. packagecom.andyidea.demo;
  2. importjava.util.ArrayList;
  3. importjava.util.List;
  4. importandroid.app.ExpandableListActivity;
  5. importandroid.os.Bundle;
  6. importandroid.view.Gravity;
  7. importandroid.view.View;
  8. importandroid.view.ViewGroup;
  9. importandroid.view.Window;
  10. importandroid.widget.AbsListView;
  11. importandroid.widget.BaseExpandableListAdapter;
  12. importandroid.widget.TextView;
  13. publicclassContactsActivityextendsExpandableListActivity{
  14. List<String>group;//组列表
  15. List<List<String>>child;//子列表
  16. ContactsInfoAdapteradapter;//数据适配器
  17. /**Calledwhentheactivityisfirstcreated.*/
  18. @Override
  19. publicvoidonCreate(BundlesavedInstanceState){
  20. super.onCreate(savedInstanceState);
  21. requestWindowFeature(Window.FEATURE_NO_TITLE);//设置为无标题
  22. setContentView(R.layout.main);
  23. getExpandableListView().setBackgroundResource(R.drawable.default_bg);
  24. initializeData();
  25. getExpandableListView().setAdapter(newContactsInfoAdapter());
  26. getExpandableListView().setCacheColorHint(0);//设置拖动列表的时候防止出现黑色背景
  27. }
  28. /**
  29. *初始化组、子列表数据
  30. */
  31. privatevoidinitializeData(){
  32. group=newArrayList<String>();
  33. child=newArrayList<List<String>>();
  34. addInfo("Andy",newString[]{"male","138123***","GuangZhou"});
  35. addInfo("Fairy",newString[]{"female","138123***","GuangZhou"});
  36. addInfo("Jerry",newString[]{"male","138123***","ShenZhen"});
  37. addInfo("Tom",newString[]{"female","138123***","ShangHai"});
  38. addInfo("Bill",newString[]{"male","138231***","ZhanJiang"});
  39. }
  40. /**
  41. *模拟给组、子列表添加数据
  42. *@paramg-group
  43. *@paramc-child
  44. */
  45. privatevoidaddInfo(Stringg,String[]c){
  46. group.add(g);
  47. List<String>childitem=newArrayList<String>();
  48. for(inti=0;i<c.length;i++){
  49. childitem.add(c[i]);
  50. }
  51. child.add(childitem);
  52. }
  53. classContactsInfoAdapterextendsBaseExpandableListAdapter{
  54. //-----------------Child----------------//
  55. @Override
  56. publicObjectgetChild(intgroupPosition,intchildPosition){
  57. returnchild.get(groupPosition).get(childPosition);
  58. }
  59. @Override
  60. publiclonggetChildId(intgroupPosition,intchildPosition){
  61. returnchildPosition;
  62. }
  63. @Override
  64. publicintgetChildrenCount(intgroupPosition){
  65. returnchild.get(groupPosition).size();
  66. }
  67. @Override
  68. publicViewgetChildView(intgroupPosition,intchildPosition,
  69. booleanisLastChild,ViewconvertView,ViewGroupparent){
  70. Stringstring=child.get(groupPosition).get(childPosition);
  71. returngetGenericView(string);
  72. }
  73. //----------------Group----------------//
  74. @Override
  75. publicObjectgetGroup(intgroupPosition){
  76. returngroup.get(groupPosition);
  77. }
  78. @Override
  79. publiclonggetGroupId(intgroupPosition){
  80. returngroupPosition;
  81. }
  82. @Override
  83. publicintgetGroupCount(){
  84. returngroup.size();
  85. }
  86. @Override
  87. publicViewgetGroupView(intgroupPosition,booleanisExpanded,
  88. ViewconvertView,ViewGroupparent){
  89. Stringstring=group.get(groupPosition);
  90. returngetGenericView(string);
  91. }
  92. //创建组/子视图
  93. publicTextViewgetGenericView(Strings){
  94. //LayoutparametersfortheExpandableListView
  95. AbsListView.LayoutParamslp=newAbsListView.LayoutParams(
  96. ViewGroup.LayoutParams.FILL_PARENT,40);
  97. TextViewtext=newTextView(ContactsActivity.this);
  98. text.setLayoutParams(lp);
  99. //Centerthetextvertically
  100. text.setGravity(Gravity.CENTER_VERTICAL|Gravity.LEFT);
  101. //Setthetextstartingposition
  102. text.setPadding(36,0,0,0);
  103. text.setText(s);
  104. returntext;
  105. }
  106. @Override
  107. publicbooleanhasStableIds(){
  108. //TODOAuto-generatedmethodstub
  109. returnfalse;
  110. }
  111. @Override
  112. publicbooleanisChildSelectable(intgroupPosition,intchildPosition){
  113. //TODOAuto-generatedmethodstub
  114. returntrue;
  115. }
  116. }
  117. }


最后,程序运行后截图如下:


更多相关文章

  1. Android数据库操作的两种方式
  2. cordova的android notify消息通知插件
  3. 解决Android(安卓)Studio Gradle DSL method not found: 'androi
  4. Funambol android eclipse上的配置及说明
  5. android Handler使用
  6. android触摸实现物体运动方式
  7. Android之添加快捷方式(Shortcut)到手机桌面
  8. Android编译问题:Only 64-bit build environments are supported
  9. Android中日志信息的打印方式

随机推荐

  1. Android(安卓)kotlin DataBinding 之 unr
  2. android input 命令总结
  3. Android.mk文件语法规范
  4. DroidBox简介
  5. 翻译:创造性的视觉
  6. Android(安卓)UI设计——AutoCompleteTex
  7. Android2017-2018最新面试题(3-5年经验个
  8. chromium编译与支持H264编码支持
  9. android短彩信数据库设计源码解析(一)
  10. mvp+dagger2+retrofit2+rxjava 项目框架