ExpandableListView效果相当于一个分组的ListView,点击组,会收缩或展开该组下的子元素,如下图:
ExpandableListView的用法与ListView和GridView,Gallery 类似,都是通过一个Adapter来显示.
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/elv" android:indicatorRight="160dp" android:layout_width="fill_parent" android:layout_height="fill_parent"> </ExpandableListView> <!-- indicatorRight 设置那个小图标右边缘与 ExpandableListView左边缘的间距--> </LinearLayout>
ElvAdapter.java
package com.test; import java.util.ArrayList; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.TextView; import android.widget.LinearLayout.LayoutParams; public class ElvAdapter extends BaseExpandableListAdapter { ArrayList<ElvObject> objs; Context context; ElvAdapter(Context context,ArrayList<ElvObject> objs) { this.objs=objs; this.context=context; } @Override public Object getChild(int groupPosition, int childPosition) { // TODO Auto-generated method stub return objs.get(groupPosition).childs.get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { // TODO Auto-generated method stub return childPosition; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { //子元素的View TextView tv=new TextView(context); tv.setText(objs.get(groupPosition).childs.get(childPosition)); tv.setLayoutParams(new ExpandableListView.LayoutParams(ExpandableListView.LayoutParams.FILL_PARENT,ExpandableListView.LayoutParams.WRAP_CONTENT)); return tv; } @Override public int getChildrenCount(int groupPosition) { // TODO Auto-generated method stub return objs.get(groupPosition).childs.size(); } @Override public Object getGroup(int groupPosition) { // TODO Auto-generated method stub return objs.get(groupPosition); } @Override public int getGroupCount() { // TODO Auto-generated method stub return objs.size(); } @Override public long getGroupId(int groupPosition) { // TODO Auto-generated method stub return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { //分组的View TextView tv=new TextView(context); tv.setText(objs.get(groupPosition).groupName); ExpandableListView.LayoutParams params=new ExpandableListView.LayoutParams(ExpandableListView.LayoutParams.FILL_PARENT,60); tv.setLayoutParams(params); return tv; } @Override public boolean hasStableIds() { // TODO Auto-generated method stub return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { // TODO Auto-generated method stub return true; } } class ElvObject{ String groupName=""; ArrayList<String> childs=new ArrayList<String>(); ElvObject(String groupName,ArrayList<String> childs) { this.groupName=groupName; this.childs=childs; } }
注意下面还有一个ElvObject类
主程序AndroidTestActivity.java
package com.test; import java.util.ArrayList; import android.app.Activity; import android.os.Bundle; import android.widget.ExpandableListView; public class AndroidTestActivity extends Activity { /** Called when the activity is first created. */ ExpandableListView elv; ElvAdapter adapter; ArrayList<ElvObject> objs=new ArrayList<ElvObject>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); elv=(ExpandableListView)findViewById(R.id.elv); adapter=new ElvAdapter(this,objs); elv.setAdapter(adapter); ArrayList<String> list=new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); objs.add(new ElvObject("英文",list)); ArrayList<String> list2=new ArrayList<String>(); list2.add("111"); list2.add("222"); list2.add("333"); list2.add("444"); objs.add(new ElvObject("数字",list2)); } }