xml文件很简单,就是一个ExpandableListView
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ExpandableListView
android:id="@+id/expand_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</ExpandableListView>
</RelativeLayout>
下面是java文件,注释很全,
package com.example.expandablelistviewtext;
import android.app.Activity;
import android.os.Bundle;
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.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ExpandableListAdapter adapter = new BaseExpandableListAdapter()
{
int[] logos = new int[] { R.drawable.a, R.drawable.b, R.drawable.c };
private String[] armTypes = new String[] { "神族兵种", "虫族兵种", "人族兵种" };
private String[][] arms = new String[][] {
{ "狂战士", "龙骑士", "黑暗圣堂", "电兵" },
{ "小狗", "刺蛇", "飞龙", "自爆飞机" },
{ "机枪兵", "护士MM", "幽灵" } };
//子选项是否可以选中
@Override
public boolean isChildSelectable(int groupPosition,
int childPosition)
{
return true;
}
/*
* Indicates whether the child and group IDs are stable across changes to the underlying data.(non-Javadoc)
* 大致说item的id是否稳定,
* @see android.widget.ExpandableListAdapter#hasStableIds()
*/
@Override
public boolean hasStableIds()
{
// TODO Auto-generated method stub
return true;
}
//该方法决定每个组选项的外观
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent)
{
// TODO Auto-generated method stub
LinearLayout layout = new LinearLayout(MainActivity.this);
layout.setOrientation(LinearLayout.HORIZONTAL);
layout.setGravity(Gravity.CENTER);
ImageView logo = new ImageView(MainActivity.this);
logo.setImageResource(logos[groupPosition]);
layout.addView(logo);
TextView textView = getTextView();
textView.setText(getGroup(groupPosition).toString());
layout.addView(textView);
return layout;
}
//返回ID根据被给的 groupPosition
@Override
public long getGroupId(int groupPosition)
{
// TODO Auto-generated method stub
return groupPosition;
}
//返回群组的个数
@Override
public int getGroupCount()
{
// TODO Auto-generated method stub
return armTypes.length;
}
//返回关联的数据根据被给的goupPosition
@Override
public Object getGroup(int groupPosition)
{
// TODO Auto-generated method stub
return armTypes[groupPosition];
}
//返回指定组子项的个数
@Override
public int getChildrenCount(int groupPosition)
{
// TODO Auto-generated method stub
return arms[groupPosition].length;
}
//该方法决定每个子选项的外观
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent)
{
// TODO Auto-generated method stub
TextView textView = getTextView();
textView.setText(getChild(groupPosition, childPosition).toString());
return textView;
}
//返回Id,根据被给的组和指定组的项
@Override
public long getChildId(int groupPosition, int childPosition)
{
// TODO Auto-generated method stub
return childPosition;
}
//获取指定数组位置,指定子列表处的子列表项数据
@Override
public Object getChild(int groupPosition, int childPosition)
{
// TODO Auto-generated method stub
return arms[groupPosition][childPosition];
}
//自定义的私有函数,代码重用
private TextView getTextView()
{
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 64);
TextView textView = new TextView(MainActivity.this);
textView.setLayoutParams(lp);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
textView.setPadding(36, 0, 0, 0);
return textView;
}
};
ExpandableListView expandListView = (ExpandableListView)findViewById(R.id.expand_list);
expandListView.setAdapter(adapter);
//点击子选项监听器,还有 onGroupClickListener等监听器, 在
expandListView.setOnChildClickListener(new OnChildClickListener()
{
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id)
{
// TODO Auto-generated method stub
System.out.println("您点击的是第" + groupPosition + "组" + "第" + childPosition + "行");
return false;
}
});
}
@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;
}
}
出在 android疯狂讲义例子,