android 适配器Adpter的使用总结 之 BaseExpandableListAdapter

来源:互联网 发布:python caffe 编辑:程序博客网 时间:2024/04/30 10:53

android 适配器Adpter的使用总结 之 BaseExpandableListAdapter

2011-06-20 23:37 by 雪夜&流星, 94 visits, 收藏, 编辑

转载请标明出处:http://www.cnblogs.com/tanlon/archive/2011/06/20/2085583.html

通过前面三篇文章:

Android 适配器Adapter的学习:http://www.cnblogs.com/tanlon/archive/2011/05/21/2053009.html

Android 适配器Adpter的使用总结:http://www.cnblogs.com/tanlon/archive/2011/06/20/2084901.html

Android 适配器Adpter的使用总结 之 CursorAdpter:http://www.cnblogs.com/tanlon/archive/2011/06/20/2085562.html

我们对Adpter有了较深的理解之后,我们来了解一下BaseExpandableListAdapter也就是二级树ExpandableListView的数据填充器。

我们应该先了解一下关于BaseExpandableListAdapter中的一些方法的含义和用法:

http://www.cnblogs.com/over140/archive/2011/01/18/1937921.html

如我的上篇博文<Android 适配器Adpter的使用总结 之 CursorAdpter>提到的BaseExpandableListAdapter则是实现了ExpandableListAdpter、HeterogeneousExpandableList接口,同理CursorTreeAdapter继承了BaseExpandableListAdapter,并且衍生出了ResourceCusorTreeAdapter,由ResourceCusorTreeAdapter又衍生出了SimpleCursorTreeAdapter。除此之外还有SimpleExpandableListAdapter也是继承自BaseExpandableListAdapter.

在这里还是以SimpleExpandableListAdapter为例,做一个小demo:

布局文件:

View Code
<?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"> <ExpandableListView android:layout_height="fill_parent" android:layout_width="fill_parent" android:id="@+id/expandableListView"/></LinearLayout>
View Code
<?xml version="1.0" encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center"><TextViewandroid:id="@+id/expandablelistview_tv"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:text="expandablelistview_tv"android:layout_centerVertical="true"android:paddingLeft="50dp"android:textSize="24dp"/></RelativeLayout>

数据填充器:

View Code
数据填充对象的构造、数据的封装:
public class ListSimpleExpandableListAdapter extends SimpleExpandableListAdapter{ private Context context; private List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();//装载group数据 private List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>();//装载child数据 private int expandedGroupLayout; private int collapsedGroupLayout; private String[] groupFrom; private int[] groupTo; private int childLayout; private int lastChildLayout; private String[] childFrom; private int[] childTo; //构造器 public ListSimpleExpandableListAdapter(Context context, List<Map<String, String>> groupData, int expandedGroupLayout, int collapsedGroupLayout, String[] groupFrom, int[] groupTo, List<List<Map<String, String>>> childData, int childLayout, int lastChildLayout, String[] childFrom, int[] childTo) { super(context, groupData, expandedGroupLayout, collapsedGroupLayout, groupFrom, groupTo, childData, childLayout, lastChildLayout, childFrom, childTo); // TODO Auto-generated constructor stub this.context=context; this.groupData=groupData; this.childData=childData; this.expandedGroupLayout=expandedGroupLayout; this.collapsedGroupLayout=collapsedGroupLayout; this.groupFrom=groupFrom; this.groupTo=groupTo; this.childLayout=childLayout; this.lastChildLayout=lastChildLayout; this.childFrom=childFrom; this.childTo=childTo; } //获取group对象 @Override public Object getGroup(int groupPosition) { // TODO Auto-generated method stub return groupData; } //获取group对象的数量 @Override public int getGroupCount() { // TODO Auto-generated method stub return groupData.size(); } //获取group的id @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) { // TODO Auto-generated method stub GroupHolder groupHolder; if(convertView==null){ convertView=LayoutInflater.from(context).inflate(expandedGroupLayout, null); groupHolder=new GroupHolder();// groupHolder.imageView=(ImageView) convertView.findViewById(R.id.expandablelistview_iv); groupHolder.textView=(TextView) convertView.findViewById(R.id.expandablelistview_tv); convertView.setTag(groupHolder); }else{ groupHolder=(GroupHolder) convertView.getTag(); }// groupHolder.imageView.setImageResource(Integer.parseInt(groupData.get(groupPosition).get(groupFrom[0]).toString())); groupHolder.textView.setText(groupData.get(groupPosition).get(groupFrom[1]).toString()); return convertView; } //子节点是否被选中 @Override public boolean isChildSelectable(int groupPosition, int childPosition) { // TODO Auto-generated method stub return true; } //获取子节点的数量 @Override public int getChildrenCount(int groupPosition) { // TODO Auto-generated method stub return childData.get(groupPosition).size(); } //获取子节点对象 @Override public Object getChild(int groupPosition, int childPosition) { // TODO Auto-generated method stub return childData.get(groupPosition).get(childPosition); } //获取子节点id @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 ChildHolder childHolder; if(convertView==null){ convertView=LayoutInflater.from(context).inflate(childLayout, null); childHolder=new ChildHolder(); childHolder.imageView=(ImageView) convertView.findViewById(R.id.listitem_pic); childHolder.title=(TextView) convertView.findViewById(R.id.listitem_title); childHolder.content=(TextView) convertView.findViewById(R.id.listitem_content); convertView.setTag(childHolder); }else{ childHolder=(ChildHolder) convertView.getTag(); } childHolder.imageView.setImageResource(Integer.parseInt(childData.get(groupPosition).get(childPosition).get(childFrom[0]).toString())); childHolder.title.setText(childData.get(groupPosition).get(childPosition).get(childFrom[1]).toString()); childHolder.content.setText(childData.get(groupPosition).get(childPosition).get(childFrom[2]).toString()); return convertView; } class GroupHolder{ ImageView imageView; TextView textView; } class ChildHolder{ ImageView imageView; TextView title; TextView content; }}
View Code
public class ListSimpleExpandableList extends Activity{ private static final String ICON="ICON"; private static final String NAME = "NAME"; private static final String IS_EVEN = "IS_EVEN"; private ExpandableListAdapter mAdapter; private ExpandableListView expandableListView; protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.groupexpandablelist); List<Map<String, String>> groupData = new ArrayList<Map<String, String>>(); List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>(); for (int i = 0; i < 20; i++) { Map<String, String> curGroupMap = new HashMap<String, String>(); groupData.add(curGroupMap); curGroupMap.put(ICON, String.valueOf(R.drawable.icon)); curGroupMap.put(NAME, "Group " + i); curGroupMap.put(IS_EVEN, (i % 2 == 0) ? "This group is even" : "This group is odd"); List<Map<String, String>> children = new ArrayList<Map<String, String>>(); for (int j = 0; j < 15; j++) { Map<String, String> curChildMap = new HashMap<String, String>(); curChildMap.put(ICON, String.valueOf(R.drawable.icon)); curChildMap.put(NAME, "Child " + j); curChildMap.put(IS_EVEN, (j % 2 == 0) ? "This child is even" : "This child is odd"); children.add(curChildMap); } childData.add(children); } expandableListView=(ExpandableListView) findViewById(R.id.expandableListView); mAdapter=new ListSimpleExpandableListAdapter(this, groupData, R.layout.groupexpandablelist_item, 0, new String[] { ICON ,NAME, IS_EVEN }, null, childData, R.layout.listsimple_item, 0, new String[] { ICON ,NAME, IS_EVEN }, null); expandableListView.setAdapter(mAdapter); //传入null则是消除箭头,如果想替换成自己的图标则传入一个drawable即可// this.expandableListView.setGroupIndicator(null); } }
有什么不对的地方还望大牛多多指教!相关代码发布在QQ群:Android中高级技术免费培训QQ群(118949422)很晚了,睡觉去了,明天有机会再写。