ExpandableListview
在垂直滾動展示兩級列表的的視圖。這與ListView不同,它有組對象和子對象,通過點擊組對象來單制度展開子對象的內容,它的適配器跟普通的ListView不一樣,需要繼承BaseExpandableListAdapter ,都是用來給View提供數據,展示佈局。
ExpandableListView是Android中可以實現下拉ListView的一個控件,是ListView的子類。
老規矩,先來看下效果圖:
就是這麼 一個效果,有興趣的話就往下看把
1.先來看下佈局,沒有添加任何屬性
<ExpandableListView
android:id="@+id/mElistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
2.隨便模擬了幾個數據
public String[] titleStrings = {"女朋友", "女神", "基友", "小弟"};
public String[][] nameStrings = {
{"蒼井空", "波多野結衣", "小澤瑪莉亞", "龍澤羅拉"},
{"鹿晗", "李易峯", "吳亦凡", "王俊凱"},
{"張先生", "劉先生", "李先生", "杜先生", "小弟弟"},
{"奧巴驢", "小學僧", "兒童劫", "托兒索"}
};
3.初始化數據源
/**
* 初始化數據源
*/
private void initList() {
List<TitleInfo> mList = new ArrayList<>();
for (int i = 0; i < titleStrings.length; i++) {
//創建組對象
TitleInfo info= new TitleInfo();
//循環添加組的標題名
info.setTitle(titleStrings[i]);
//創建子對象數據源
List<ContentInfo> list = new ArrayList<>();
for (int j = 0; j < nameStrings.length; j++) {
//創建子對象
ContentInfo info2 = new ContentInfo();
//添加用戶名或者頭像
info2.setName(nameStrings[i][j]);
//將子對象添加到數據源
list.add(info2);
}
//將子對象數據源複製給組對象
info.setInfo(list);
//將組對象添加到總數據源中
mList.add(info);
}
}
4.因爲這是一個二級列表,所以它需要一個組對象的Bean和子對象的Bean,簡潔說下參數
TitleInfo:
private String title;
private List<ContentInfo> info;
ContentInfo:
public String name; //名稱
private String qianming;//簽名
private String icon; //頭像
5.寫一個適配器 extens BaseExpandableListAdapter,他會返回很多方法,我已經在代碼中都註釋了
6.適配器裏面有兩個xml文件,我把它們分爲組佈局和子佈局
7.MainActivity設置適配器就可以展示基本的效果了
8.我模擬了當點擊一個組對象關閉其他組對象列表的功能,在工具類EListViewUtils.java文件中,通過調用適配器中的onGroupExpanded()方法來獲取點擊組對象的位置
9.對於處理item的點擊事件,還要設置監聽器,常用的有這麼幾個類
- setOnChildClickListener
- setOnGroupClickListener
- setOnGroupCollapseListener
- setOnGroupExpandListener
通過方法我們就會知道功能分別是擊子選項、單擊分組項、分組合並、分組展開的監聽器。
代碼就不貼了,太多,我已經給每一行添加過註釋