今天发现ExpandableListAdapter 用起来挺麻烦的, 要建很多个map 数据对象,感觉特别烦, 自己索性写了一个list 的adapter ,自己鼓捣了一下 写了一个扩展的自定义的Expand 类似QQ的样子, 其实也没什么,主要是继承 BaseExpandableListAdapter , 这个adpter 跟baseadpter没什么区别,主要是覆盖的东西挺多的。 然后就是自定义数据, 界面显示,主要是搭一个架子, 想扩展的,美化效果的,可以自定义style 什么的。自己弄弄很简单的。
/*
* @project PhotoGallery
* @package com.android.photogallery
* @file ExpandableActivity.java
* @version 1.0
* @author 廖益平
*/
package com.android.photogallery;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class ExpandableActivity extends Activity{
/*
*
* Class Descripton goes here.
*
* @class ExpandableActivity
* @version 1.0
* @author 廖益平
* @time 2011-11-17 上午06:52:18
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.expand);
ExpandableListView listView = (ExpandableListView) findViewById(R.id.expand);
List<Student> stuList = new ArrayList<Student>();
//stuList
List list = new ArrayList();
List resoucelist = new ArrayList();
/**
* 反射机制获取资源图片id的值
*/
Field[] f = R.drawable.class.getDeclaredFields();
for (Field field : f) {
try {
resoucelist.add(field.get(null));
System.out.println("value : "+field.getDouble(null));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
list.add("小A");
list.add("小B");
list.add("小C");
list.add("小D");
stuList.add(new Student("同学", list, resoucelist));
list = new ArrayList();
list.add("大A");
list.add("大B");
list.add("大C");
list.add("大D");
stuList.add(new Student("朋友", list, resoucelist));
listView.setAdapter(new myExpandable(stuList));
}
/**
*
* <code>myExpandable</code>
* @description: TODO(自定义)
* @version 1.0
* @author 廖益平
* @since 2011-11-17
*/
class myExpandable extends BaseExpandableListAdapter{
private List<Student> source;
public myExpandable(List<Student> stuList){
this.source = stuList;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return source.get(groupPosition).object.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) {
// TODO Auto-generated method stub
LayoutInflater inflater = getLayoutInflater();
LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.parent, null);
ImageView photo = (ImageView) layout.findViewById(R.id.image);
TextView name = (TextView) layout.findViewById(R.id.name);
photo.setImageBitmap(BitmapFactory.decodeResource(getResources(),
source.get(groupPosition).souceId.get(childPosition)));
name.setText(source.get(groupPosition).object.get(childPosition).toString());
return layout;
}
@Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return source.get(groupPosition).getObject().size();
}
@Override
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
return source.get(groupPosition).getName();
}
@Override
public int getGroupCount() {
// TODO Auto-generated method stub
return source.size();
}
@Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
TextView tv=new TextView(ExpandableActivity.this);
tv.setText(source.get(groupPosition).getName());
tv.setTextSize(20);
tv.setLayoutParams(new ExpandableListView.LayoutParams(ExpandableListView.LayoutParams.FILL_PARENT,30));
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 Student{
private List<Integer> souceId = new ArrayList<Integer>();
public Student(String name,List<Object> st ,List<Integer> souceid){
this.name =name;
this.object = st;
this.souceId = souceid;
}
private String name;
private List<Object> object;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Object> getObject() {
return object;
}
public void setObject(List<Object> object) {
this.object = object;
}
}
}