activity_main.xml
<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" > <ExpandableListView android:id="@+id/expandableListView1" android:layout_width="match_parent" android:layout_height="match_parent" > </ExpandableListView> </RelativeLayout>
MainActivity.java
package com.example.expandablelistview; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.app.Activity; import android.view.Gravity; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; import android.widget.Toast; import android.widget.ExpandableListView.OnGroupClickListener; import android.widget.TextView; public class MainActivity extends Activity { ExpandableListView expandableListView; private List<String> GroupData;//定義組數據 private List<List<String>> ChildrenData;//定義組中的子數據 private void LoadListDate() { GroupData = new ArrayList<String>(); GroupData.add("國家"); GroupData.add("人物"); GroupData.add("武器"); ChildrenData = new ArrayList<List<String>>(); List<String> Child1 = new ArrayList<String>(); Child1.add("蜀國"); Child1.add("魏國"); Child1.add("吳國"); ChildrenData.add(Child1); List<String> Child2 = new ArrayList<String>(); Child2.add("關羽"); Child2.add("張飛"); Child2.add("典韋"); Child2.add("呂布"); Child2.add("曹操"); Child2.add("甘寧"); Child2.add("郭嘉"); Child2.add("周瑜"); ChildrenData.add(Child2); List<String> Child3 = new ArrayList<String>(); Child3.add("青龍偃月刀"); Child3.add("丈八蛇矛槍"); Child3.add("青鋼劍"); Child3.add("麒麟弓"); Child3.add("銀月槍"); ChildrenData.add(Child3); } boolean flags; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LoadListDate(); expandableListView=(ExpandableListView) findViewById(R.id.expandableListView1); expandableListView.setAdapter(new ExpandableAdapter()); // ExpandableListView 默认展开 for(int i = 0; i < 3; i++){ expandableListView.expandGroup(i); } //去掉ExpandableListView默认的箭头 expandableListView.setGroupIndicator(null);
//flags=false; //ExpandableListView点击Group不收缩,群组点击事件屏蔽 expandableListView.setOnGroupClickListener(new OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
//if (flags==true) {
// expandableListView.expandGroup(groupPosition);
// flags=false;
//}else {
// expandableListView.collapseGroup(groupPosition);
// flags=true;
//}
Toast.makeText(MainActivity.this, "群组:"+groupPosition, Toast.LENGTH_SHORT).show(); return true; } }); //ExpandableListView点击Child提醒 expandableListView.setOnChildClickListener(new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Toast.makeText(MainActivity.this, "群组:"+groupPosition+" "+"小节:"+childPosition, Toast.LENGTH_SHORT).show(); return true; } }); } private class ExpandableAdapter extends BaseExpandableListAdapter { @Override public Object getChild(int groupPosition, int childPosition) { return ChildrenData.get(groupPosition).get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return 0; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { TextView myText = null; if (convertView != null) { myText = (TextView)convertView; myText.setText(ChildrenData.get(groupPosition).get(childPosition)); } else { myText = createView(ChildrenData.get(groupPosition).get(childPosition)); } return myText; } @Override public int getChildrenCount(int groupPosition) { return ChildrenData.get(groupPosition).size(); } @Override public Object getGroup(int groupPosition) { return GroupData.get(groupPosition); } public int getGroupCount() { return GroupData.size(); } @Override public long getGroupId(int groupPosition) { return 0; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { TextView myText = null; if (convertView != null) { myText = (TextView)convertView; myText.setText(GroupData.get(groupPosition)); //设置GroupView内容居中和颜色 myText.setGravity(Gravity.CENTER); myText.setBackgroundColor(android.graphics.Color.GRAY); } else { myText = createView(GroupData.get(groupPosition)); //设置GroupView内容居中和颜色 myText.setGravity(Gravity.CENTER); myText.setBackgroundColor(android.graphics.Color.GRAY); } return myText; } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { //设置小节可被点击 return true; } private TextView createView(String content) { AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, 80); TextView myText = new TextView(MainActivity.this); myText.setLayoutParams(layoutParams); myText.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); myText.setPadding(80, 0, 0, 0); myText.setText(content); return myText; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
下面介绍如何从ExpandableListView中取值:
//ExpandableListView点击Child提醒 expandableListView.setOnChildClickListener(new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Toast.makeText(NameListActivity.this, ChildrenData.get(groupPosition).get(childPosition)+" "+GroupData.get(groupPosition), Toast.LENGTH_SHORT).show(); return true; } });