源地址:http://blog.csdn.net/xyz_lmn/article/details/6906268。
正好最近看了第一行代码,加了点自己的想法,就边学习,边敲打。
MainActivity.java:
package com.example.li.viewpage;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ExpandableListView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
Map<String, String> curGroupMap;
List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();
List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>();
ExAdapter exAdapter;
ExpandableListView expandableListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for(int i = 0; i < 5; i++){
curGroupMap = new HashMap<String, String>();
curGroupMap.put("g_text", "Group" + i);
groupData.add(curGroupMap);
List<Map<String, String>> children = new ArrayList<Map<String, String>>();
for(int j = 0; j < 5; j++){
Map<String, String> curChildMap = new HashMap<String, String>();
children.add(curChildMap);
curChildMap.put("c_text1", "child" + j);
curChildMap.put("c_text1", "child" + j);
}
//第二层使用了复杂的数据结构,即它本身是list里面储存的是list,而储存的每个list又储存了Map
//因此,在取出时
//@Override
//public Object getChild(int groupPosition, int childPosition)
// return childData.get(groupPosition).get(childPosition).get("c_text1").toString();
//先根据groupPosition取出储存的list,然后根据childPosition取出Map,再根据key,取出value.
//当然,你可以直接定义一个5*5的list,作为子数据。但是太死板
childData.add(children);
}
exAdapter = new ExAdapter(MainActivity.this, groupData, childData);
expandableListView = (ExpandableListView) findViewById(R.id.list);
expandableListView.setAdapter(exAdapter);
expandableListView.setGroupIndicator(null);
expandableListView.setDivider(null);
}
}
ExAdapter.java:
package com.example.li.viewpage;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
import java.util.Map;
/**
* Created by li on 2016.4.11.
*/
public class ExAdapter extends BaseExpandableListAdapter {
private List<Map<String, String>> groupData;
private List<List<Map<String, String>>> childData;
private LayoutInflater inflater;
private ViewHolder holder;
public ExAdapter(Context context, List<Map<String, String>> groupData, List<List<Map<String, String>>> childData) {
super();
this.inflater = LayoutInflater.from(context);
this.groupData = groupData;
this.childData = childData;
}
@Override
public int getGroupCount() {
return groupData.size();
}
@Override
public Object getGroup(int groupPosition) {
return groupData.get(groupPosition).get("g_text").toString();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
//缓冲机制,使用缓存参数
if(convertView == null){
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.member_listview, null);
holder.title = (TextView) convertView.findViewById(R.id.textview);
holder.imageView = (ImageView) convertView.findViewById(R.id.imageview);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.title.setText(getGroup(groupPosition).toString());
if(isExpanded){
holder.imageView.setBackgroundResource(R.mipmap.btn_browser2);
}else{
holder.imageView.setBackgroundResource(R.mipmap.btn_browser);
}
return convertView;
}
public final class ViewHolder{
public TextView title;
public TextView title2;
public ImageView imageView;
}
@Override
public int getChildrenCount(int groupPosition) {
return childData.get(groupPosition).size();
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return childData.get(groupPosition).get(childPosition).get("c_text1").toString();
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
if(convertView == null){
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.member_childitem, null);
holder.title = (TextView) convertView.findViewById(R.id.child_text);
holder.title2 = (TextView) convertView.findViewById(R.id.child_text2);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.title.setText(childData.get(groupPosition).get(childPosition).get("c_text1").toString());
holder.title2.setText(childData.get(groupPosition).get(childPosition).get("c_text1").toString());
return convertView;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
activity_.main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/default_bg"
>
<ExpandableListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
></ExpandableListView>
</RelativeLayout>
member_childitem.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/childlayout"
android:orientation="horizontal">
<ImageView
android:id="@+id/child_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/child_image"
android:paddingTop="10dip"
android:layout_marginLeft="40dip"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:text=""
android:id="@+id/child_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textSize="16dip"
android:layout_gravity="center_vertical"/>
<TextView
android:text=""
android:id="@+id/child_text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12dip"
android:gravity="center_vertical"
android:layout_gravity="center_vertical"/>
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="40dip"
android:layout_gravity="center_horizontal">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="40dip"
>
<ImageView
android:id="@+id/ImageView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingTop="10dip"
android:src="@mipmap/user_group"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textview"
android:textSize="26px"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:textColor="#FFFFFF"
android:gravity="center_vertical"
android:paddingLeft="10px"
android:layout_gravity="center_vertical"/>
<ImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"/>
</RelativeLayout>
</LinearLayout>
</LinearLayout>