Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android學習指南之四十三:用戶界面View之ExpandableListView(手風琴效果Accordion)

Android學習指南之四十三:用戶界面View之ExpandableListView(手風琴效果Accordion)

編輯:關於android開發

       本節主要講解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一樣討厭,來,我們一起鄙視一下^_^

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved