本节主要讲解ExpandableListView可扩展列表组件。ExpandableListView配置是有些麻烦,也容易出问题,所以本文中的实例中尽量去掉了干扰内容,大家能有更清晰的了解,更容易借鉴。

       下面先给大家演示程序运行结果。

Android学习指南之四十三:用户界面View之ExpandableListView(手风琴效果Accordion)

       点击一级列表,展开下一级:

Android学习指南之四十三:用户界面View之ExpandableListView(手风琴效果Accordion)

       点击二层列表(嵌套的列表)的某一项:

Android学习指南之四十三:用户界面View之ExpandableListView(手风琴效果Accordion)

       下面我们来看代码:

       1、新建一个项目 Lesson43_ExpandableListView。

       2、main.xml 的内容如下:

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">  
  3.         <expandablelistview android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@id/android:list">  
  4.         </expandablelistview>  
  5. </linearlayout>  

       请注意ExpandableListView标签中id的写法是固定的@id/android:list,因为我们这里用的是ExpandableListActivity,而ExpandableListActivity代码里写死了要寻找的UI元素是它,这和我们以前讲的很多特殊的Activity是一样的,这里再稍作提醒。

       3、MainActivity.java的代码如下,解释在注释里:

Java代码
  1. package basic.android.lesson43;   
  2.   
  3. import java.util.ArrayList;   
  4. import java.util.HashMap;   
  5. import java.util.List;   
  6. import java.util.Map;   
  7.   
  8. import android.app.ExpandableListActivity;   
  9. import android.os.Bundle;   
  10. import android.view.View;   
  11. import android.widget.ExpandableListView;   
  12. import android.widget.SimpleExpandableListAdapter;   
  13. import android.widget.Toast;   
  14.   
  15. public class MainActivity extends ExpandableListActivity {   
  16.   
  17.         @Override  
  18.         public void onCreate(Bundle savedInstanceState) {   
  19.                 super.onCreate(savedInstanceState);   
  20.                 setContentView(R.layout.main);   
  21.   
  22.                 // 准备顶层列表数据   
  23.                 List   
  24. <map string=""><string ,="">> topList = new ArrayList</string></map>   
  25. <map string=""><string ,="">>();   
  26.   
  27.                 Map</string><string string="" ,=""> topMap1 = new HashMap</string><string string="" ,="">();   
  28.                 Map</string><string string="" ,=""> topMap2 = new HashMap</string><string string="" ,="">();   
  29.                 topMap1.put("month""三月测评项");   
  30.                 topMap2.put("month""四月测评项");   
  31.                 topList.add(topMap1);   
  32.                 topList.add(topMap2);   
  33.   
  34.                 // 准备二层列表数据   
  35.                 List   
  36. <list string="">   
  37. <map><string ,="">>> nestList = new ArrayList</string></map>   
  38. </list>   
  39. <list string="">   
  40. <map><string ,="">>>();   
  41.   
  42.                 // 准备二层列表第一个子列表数据   
  43.                 List   
  44. <map string=""><string ,="">> nestList1 = new ArrayList</string></map>   
  45. <map string=""><string ,="">>();   
  46.                 Map</string><string string="" ,=""> nestMap1 = new HashMap</string><string string="" ,="">();   
  47.                 Map</string><string string="" ,=""> nestMap2 = new HashMap</string><string string="" ,="">();   
  48.                 Map</string><string string="" ,=""> nestMap3 = new HashMap</string><string string="" ,="">();   
  49.                 nestMap1.put("test""看手");   
  50.                 nestMap2.put("test""吃手");   
  51.                 nestMap3.put("test""玩手");   
  52.                 nestList1.add(nestMap1);   
  53.                 nestList1.add(nestMap2);   
  54.                 nestList1.add(nestMap3);   
  55.   
  56.                 // 准备二层列表第二个子列表数据   
  57.                 List   
  58. <map string=""><string ,="">> nestList2 = new ArrayList</string></map>   
  59. <map string=""><string ,="">>();   
  60.                 Map</string><string string="" ,=""> nestMap4 = new HashMap</string><string string="" ,="">();   
  61.                 Map</string><string string="" ,=""> nestMap5 = new HashMap</string><string string="" ,="">();   
  62.                 nestMap4.put("test""翻身");   
  63.                 nestMap5.put("test""辨别声音来源方位");   
  64.                 nestList2.add(nestMap4);   
  65.                 nestList2.add(nestMap5);   
  66.   
  67.                 // 把子列表数据放入   
  68.                 nestList.add(nestList1);   
  69.                 nestList.add(nestList2);   
  70.   
  71.                 // 准备数据匹配器   
  72.                 SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(   
  73.                                 this//1.上下文   
  74.                                 topList, //2.顶层数据列表   
  75.                                 android.R.layout.simple_expandable_list_item_1, // 3.一层显示样式   
  76.                                 new String[]{"month"}, //4.顶层map的键   
  77.                                 new int[]{android.R.id.text1}, // 5.顶层数据显示的View ID   
  78.                                 nestList, //6.二层数据列表   
  79.                                 android.R.layout.simple_list_item_1, //7.二层显示样式   
  80.                                 new String[]{"test"}, //8.二层map的键   
  81.                                 new int[]{android.R.id.text1} //9.二层数据显示的View ID   
  82.                                 );   
  83.   
  84.                 //设置数据匹配器   
  85.                 this.setListAdapter(adapter);   
  86.   
  87.         }   
  88.   
  89.         @Override  
  90.         public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {   
  91.                 Toast.makeText(this"嵌套列表被点击,顶层列表定位"+groupPosition+"二层列表定位"+childPosition, Toast.LENGTH_LONG).show();   
  92.                 return super.onChildClick(parent, v, groupPosition, childPosition, id);   
  93.         }   
  94.   
  95.         @Override  
  96.         public void onGroupCollapse(int groupPosition) {   
  97.                 Toast.makeText(this"顶层列表收缩,列表定位"+groupPosition, Toast.LENGTH_LONG).show();   
  98.                 super.onGroupCollapse(groupPosition);   
  99.         }   
  100.   
  101.         @Override  
  102.         public void onGroupExpand(int groupPosition) {   
  103.                 Toast.makeText(this"顶层列表展开,列表定位"+groupPosition, Toast.LENGTH_LONG).show();   
  104.                 super.onGroupExpand(groupPosition);   
  105.         }   
  106.   
  107. }   
  108. </string></map>   
  109.   
  110. </string></map>   
  111.   
  112. </string></map>   
  113. </list></string></map>  

       4、编译并运行程序即可看到上面的效果。那么本节课就到这里了,Android中很多内容就像本节的ExpandableListView一样讨厌,来,我们一起鄙视一下^_^

本文发布:Android开发网
本文地址:http://www.jizhuomi.com/android/course/294.html
2012年11月28日
发布:鸡啄米 分类:Android开发教程 浏览: 评论:0