<button id="u2w23"></button>

<tbody id="u2w23"><track id="u2w23"></track></tbody><dd id="u2w23"><track id="u2w23"></track></dd><button id="u2w23"><acronym id="u2w23"></acronym></button> <tbody id="u2w23"><noscript id="u2w23"></noscript></tbody>

  • <button id="u2w23"></button><li id="u2w23"><acronym id="u2w23"><cite id="u2w23"></cite></acronym></li>

  • Android控件之ExpandableListView

    [來源] 達內    [編輯] 達內   [時間]2012-06-19

    Android控件之ExpandableListView

     先把運行效果附在下面:

     

      首先看下布局文件:在定義布局時,這里要定義三個布局文件,全在res/layout目錄下,我先把布局文件附在下面,具體有什么用,我在下面會詳細說明

      main.xml:

      <?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"
         >
      <ExpandableListView 
          android:id="@id/android:list" 
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:drawSelectorOnTop="false"/>
      <TextView  
         android:layout_width="fill_parent" 
         android:layout_height="fill_parent" 
         android:id="@id/android:empty"
         android:text="No Data"/>
     </LinearLayout> 

      groups.xml:

      <?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"
         >
      <TextView  
         android:layout_width="fill_parent" 
         android:layout_height="fill_parent" 
         android:id="@+id/group"
         android:textSize="25sp"
         android:paddingLeft="35px"
         android:paddingTop="10px"
         android:paddingRight="5px"
         android:paddingBottom="10px"
         android:text="No Data"/>
     </LinearLayout>

      childs.xml:

      <?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"
         >
      <TextView  
         android:layout_width="fill_parent" 
         android:layout_height="fill_parent" 
         android:id="@+id/child"
         android:textSize="15sp"
         android:paddingLeft="25px"
         android:paddingTop="10px"
         android:paddingRight="5px"
         android:paddingBottom="10px"
         android:text="No Data"/>
     </LinearLayout>

      首先,第一個布局文件main.xml是在主界面定義一個ExpandableListView ,在這里我們就要和在做ListView是的方法做下對比了,其實這個listView的顯示類似。主要是用來顯示ExpandableListView 下的數據。第二個布局文件是定義ExpandableListView 下的一級條目目錄。在這里我只為一級條目目錄添加一個textView控件。第三個布局文件是定義ExpandableListView 下的二級條目目錄,和一級條目目錄一樣,布局文件里也只有一個TextView控件。

      Java代碼:

      ExpandableActivity:

      package cn.yj3g.ExpandableListActivity;
     
     import java.util.ArrayList;
     import java.util.HashMap;
     import java.util.List;
     import java.util.Map;
     import android.app.ExpandableListActivity;
     import android.os.Bundle;
     import android.view.View;
     import android.widget.ExpandableListView;
     import android.widget.SimpleExpandableListAdapter;
     /**
      * 繼承ExpandableListActivity類
      */
     public class ExpandableActivity extends ExpandableListActivity {
         @Override
         public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.main);
             // 創建一級條目
             List<Map<String, String>> groups = new ArrayList<Map<String, String>>();
             //創建兩個一級條目標題
             Map<String, String> group1 = new HashMap<String, String>();
             group1.put("group", "音樂");
             Map<String, String> group2 = new HashMap<String, String>();
             group2.put("group", "歌詞");
             groups.add(group1);
             groups.add(group2);
             // 創建一級條目下的的二級條目
             List<Map<String, String>> child1 = new ArrayList<Map<String, String>>();
             //同樣是在一級條目目錄下創建兩個對應的二級條目目錄
             Map<String, String> childdata1 = new HashMap<String, String>();
             childdata1.put("child", "青花瓷");
             Map<String, String> childdata2 = new HashMap<String, String>();
             childdata2.put("child", "東風破");
             child1.add(childdata1);
             child1.add(childdata2);
             //同上
             List<Map<String, String>> child2 = new ArrayList<Map<String, String>>();
             Map<String, String> childdata3 = new HashMap<String, String>();
             childdata3.put("child", "青花瓷.lrc");
             Map<String, String> childdata4 = new HashMap<String, String>();
             childdata4.put("child", "東風破.lrc");
             child2.add(childdata3);
             child2.add(childdata4);
             // 將二級條目放在一個集合里,供顯示時使用
             List<List<Map<String, String>>> childs = new ArrayList<List<Map<String, String>>>();
             childs.add(child1);
             childs.add(child2);
             /**
              * 使用SimpleExpandableListAdapter顯示ExpandableListView
              * 參數1.上下文對象Context
              * 參數2.一級條目目錄集合
              * 參數3.一級條目對應的布局文件
              * 參數4.fromto,就是map中的key,指定要顯示的對象
              * 參數5.與參數4對應,指定要顯示在groups中的id
              * 參數6.二級條目目錄集合
              * 參數7.二級條目對應的布局文件
              * 參數8.fromto,就是map中的key,指定要顯示的對象
              * 參數9.與參數8對應,指定要顯示在childs中的id
              */
             SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(
                     this, groups, R.layout.groups, new String[] { "group" },
                     new int[] { R.id.group }, childs, R.layout.child,
                     new String[] { "child" }, new int[] { R.id.child });
             setListAdapter(adapter);
     
         }
         /**
          * 設置哪個二級目錄被默認選中
          */
         @Override
         public boolean setSelectedChild(int groupPosition, int childPosition,
                 boolean shouldExpandGroup) {
                 //do something
             return super.setSelectedChild(groupPosition, childPosition,
                     shouldExpandGroup);
         }
         /**
          * 設置哪個一級目錄被默認選中
          */
         @Override
         public void setSelectedGroup(int groupPosition) {
             //do something
             super.setSelectedGroup(groupPosition);
         }
         /**
          * 當二級條目被點擊時響應
          */
         @Override
         public boolean onChildClick(ExpandableListView parent, View v,
                 int groupPosition, int childPosition, long id) {
                 //do something
             return super.onChildClick(parent, v, groupPosition, childPosition, id);
         }
     
     }

      上面在顯示ExpandableListView 是用的是SimpleExpandableListAdapter ,這里要傳的參數比較多,大家在用時別一看到參數多就頭疼,沒事的,看注釋你就知道各個參數的意思了。下面的三個重寫方法是在顯示 ExpandableListView 是調用的,具體的用法就要根據需求來確定了。

     

     

     

     

    資源下載

    ?