編輯:關於android開發
先把運行效果附在下面:
首先看下布局文件:在定義布局時,這裡要定義三個布局文件,全在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 是調用的,具體的用法就要根據需求來確定了。
android:異步任務asyncTask介紹及異步任務下載圖片(帶進度條) 為什麼要用異步任務? 在android中只有在主線程才能對ui進行更新操作,而其它線程不
Android 5.0 Settings源碼簡要分析 概述: 先聲明:本人工作快兩年了,仍是菜鳥級別的,慚愧啊!以前遇到好多知識點都沒有記錄下來,感覺挺可惜的,現在有機會
android 自定義控件屬性(TypedArray以及attrs解釋) 最近在搗鼓android 自定義控件屬性,學到了TypedArray以及attrs。在這其中看了
滑動指示選項卡android.support.design.widget.TabLayout的簡單使用,android選項卡滑動 該TabLayout的功用,簡單的說,就