先看效果
demo實現
其他的方法和ListView的方法一樣,下面來看看具體demo的實現
首先布局文件很簡單,就一個控件為:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.duanlian.expendablelistviewdemo.MainActivity">
<ExpandableListView
android:id="@+id/expendablelistview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
Activity的代碼和用ListView的是一樣的,創建一個adapter和兩個 數據源,然后綁定,具體如下:
package com.duanlian.expendablelistviewdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ExpandableListView;
import com.duanlian.expendablelistviewdemo.adapter.MyAdapter;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ExpandableListView expandableListView;
private MyAdapter myAdapter;
private List<String> groupList;
private List<List<String>> childList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
expandableListView = (ExpandableListView) findViewById(R.id.expendablelistview);
groupList = new ArrayList<>();
childList = new ArrayList<>();
addData("幼稚園同學",new String[]{"周傑倫","江一燕 ","佟麗婭","高圓圓","劉詩詩","劉亦菲","angleBaby","張靜初","張含韻",});
addData("小學同學",new String[]{"光頭強","熊大","熊二","妙蛙種子","比卡丘","雙蛋瓦斯","貪吃蛇"});
addData("初中同學",new String[]{"蒼井空","小澤瑪利亞","吉澤明步","波多野結衣","愛川美里菜","小川阿佐美","桃谷繪里香","瀧澤蘿拉","北原多香子","石川施恩惠","北條麻妃","麻倉優","羽田愛","保坂繪里"});
addData("高中同學",new String[]{"秦始皇","李世民","武則天","曹操","劉備","孫權"});
addData("大學同學",new String[]{"周傑倫","江一燕 ","佟麗婭","高圓圓","劉詩詩","劉亦菲","angleBaby","張靜初","張含韻",});
addData("研究生同學",new String[]{"光頭強","熊大","熊二","妙蛙種子","比卡丘","雙蛋瓦斯","貪吃蛇"});
addData("博士同學",new String[]{"蒼井空","小澤瑪利亞","吉澤明步","波多野結衣","愛川美里菜","小川阿佐美","桃谷繪里香","瀧澤蘿拉","北原多香子","石川施恩惠","北條麻妃","麻倉優","羽田愛","保坂繪里"});
addData("教授同事",new String[]{"秦始皇","李世民","武則天","曹操","劉備","孫權"});
addData("眾仙家名冊",new String[]{"蒼井空","小澤瑪利亞","吉澤明步","波多野結衣","愛川美里菜","小川阿佐美","桃谷繪里香","瀧澤蘿拉","北原多香子","石川施恩惠","北條麻妃","麻倉優","羽田愛","保坂繪里","秦始皇","李世民","武則天","曹操","劉備","孫權"});
myAdapter = new MyAdapter(this,groupList,childList);
expandableListView.setAdapter(myAdapter);
}
/**
* 用來添加數據的方法
*/
private void addData(String group, String[] friend) {
groupList.add(group);
//每一個item打開又是一個不同的list集合
List<String> childitem = new ArrayList<>();
for (int i = 0; i < friend.length; i++) {
childitem.add(friend[i]);
}
childList.add(childitem);
}
}
然后Adapter里面需要2個item布局文件:
外層的item:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ed88ed"
tools:context="com.duanlian.expendablelistviewdemo.MainActivity">
<TextView
android:id="@+id/group_textview"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:gravity="center_vertical"
android:layout_marginLeft="40dp"
android:textSize="20sp"
android:text="我的好友"/>
<TextView
android:id="@+id/group_number"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:gravity="center_vertical"
android:layout_marginRight="20dp"
android:textSize="15sp"
android:layout_alignParentRight="true"
android:text="20"/>
</RelativeLayout>
里面那層item布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="40dp"
tools:context="com.duanlian.expendablelistviewdemo.MainActivity">
<com.duanlian.expendablelistviewdemo.CircleImageView
android:id="@+id/child_img"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="10dp"
android:layout_centerVertical="true"
android:src="@mipmap/duanlian"/>
<TextView
android:id="@+id/child_name"
android:layout_height="40dp"
android:layout_width="wrap_content"
android:layout_toRightOf="@+id/child_img"
android:layout_marginLeft="15dp"
android:textSize="16sp"
android:gravity="center_vertical"
android:text="吉澤明步"/>
<TextView
android:id="@+id/child_model"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:gravity="center_vertical"
android:layout_alignParentRight="true"
android:layout_marginRight="5dp"
android:textSize="13sp"
android:text="4G"/>
</RelativeLayout>
最總要的還是在Adapter里面,他和ListView一樣,也有simpleAdapter和ArrayAdapter,和BaseAdapter,我這里用的是BaseAdapter,他的adapter繼承的是BaseExpandableListAdapter:
package com.example.wxpandablelistviewdemo;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;
import java.util.List;
/**
* Created by duanlian on 2016/9/12.
*/
public class MyAdapter extends BaseExpandableListAdapter {
private List<String> groupList;//外層的數據源
private List<List<String>> childList;//里層的數據源
private Context context;
public MyAdapter(Context context, List<String> groupList,List<List<String>> childList ){
this.context = context;
this.groupList = groupList;
this.childList = childList;
}
@Override
public int getGroupCount() {
return groupList.size();
}
/**
* 這個返回的一定要是對應外層的item里面的List集合的size
* @param groupPosition
* @return
*/
@Override
public int getChildrenCount(int groupPosition) {
return childList.get(groupPosition).size();
}
@Override
public Object getGroup(int groupPosition) {
return groupPosition;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return childList.get(groupPosition).get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
convertView = View.inflate(context, R.layout.item_group, null);
//分組名字
TextView textView = (TextView) convertView.findViewById(R.id.group_textview);
//子元素的個數
TextView number = (TextView) convertView.findViewById(R.id.group_number);
number.setText(childList.get(groupPosition).size()+"個");
textView.setText(groupList.get(groupPosition));
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View view, ViewGroup viewGroup) {
view = View.inflate(context, R.layout.item_child, null);
TextView textView = (TextView) view.findViewById(R.id.child_name);
//外層的分組名字
textView.setText(childList.get(groupPosition).get(childPosition));
return view;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
demo地址:https://download.csdn.net/download/heishuai123/10941739
原博客地址:https://blog.csdn.net/dl10210950/article/details/52525492