package org.holoeverywhere.widget; import java.util.List; import java.util.Map; import org.holoeverywhere.LayoutInflater; import android.content.Context; import android.view.View; import android.view.ViewGroup; public class SimpleExpandableListAdapter extends BaseExpandableListAdapter { private List<? extends List<? extends Map<String, ?>>> mChildData; private String[] mChildFrom; private int mChildLayout; private int[] mChildTo; private int mCollapsedGroupLayout; private int mExpandedGroupLayout; private List<? extends Map<String, ?>> mGroupData; private String[] mGroupFrom; private int[] mGroupTo; private LayoutInflater mInflater; private int mLastChildLayout; public SimpleExpandableListAdapter(Context context, List<? extends Map<String, ?>> groupData, int expandedGroupLayout, int collapsedGroupLayout, String[] groupFrom, int[] groupTo, List<? extends List<? extends Map<String, ?>>> childData, int childLayout, int lastChildLayout, String[] childFrom, int[] childTo) { mGroupData = groupData; mExpandedGroupLayout = expandedGroupLayout; mCollapsedGroupLayout = collapsedGroupLayout; mGroupFrom = groupFrom; mGroupTo = groupTo; mChildData = childData; mChildLayout = childLayout; mLastChildLayout = lastChildLayout; mChildFrom = childFrom; mChildTo = childTo; mInflater = LayoutInflater.from(context); } public SimpleExpandableListAdapter(Context context, List<? extends Map<String, ?>> groupData, int expandedGroupLayout, int collapsedGroupLayout, String[] groupFrom, int[] groupTo, List<? extends List<? extends Map<String, ?>>> childData, int childLayout, String[] childFrom, int[] childTo) { this(context, groupData, expandedGroupLayout, collapsedGroupLayout, groupFrom, groupTo, childData, childLayout, childLayout, childFrom, childTo); } public SimpleExpandableListAdapter(Context context, List<? extends Map<String, ?>> groupData, int groupLayout, String[] groupFrom, int[] groupTo, List<? extends List<? extends Map<String, ?>>> childData, int childLayout, String[] childFrom, int[] childTo) { this(context, groupData, groupLayout, groupLayout, groupFrom, groupTo, childData, childLayout, childLayout, childFrom, childTo); } private void bindView(View view, Map<String, ?> data, String[] from, int[] to) { int len = to.length; for (int i = 0; i < len; i++) { TextView v = (TextView) view.findViewById(to[i]); if (v != null) { v.setText((String) data.get(from[i])); } } } @Override public Object getChild(int groupPosition, int childPosition) { return mChildData.get(groupPosition).get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public int getChildrenCount(int groupPosition) { return mChildData.get(groupPosition).size(); } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { View v; if (convertView == null) { v = newChildView(isLastChild, parent); } else { v = convertView; } bindView(v, mChildData.get(groupPosition).get(childPosition), mChildFrom, mChildTo); return v; } @Override public Object getGroup(int groupPosition) { return mGroupData.get(groupPosition); } @Override public int getGroupCount() { return mGroupData.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View v; if (convertView == null) { v = newGroupView(isExpanded, parent); } else { v = convertView; } bindView(v, mGroupData.get(groupPosition), mGroupFrom, mGroupTo); return v; } @Override public boolean hasStableIds() { return true; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } public View newChildView(boolean isLastChild, ViewGroup parent) { return mInflater.inflate(isLastChild ? mLastChildLayout : mChildLayout, parent, false); } public View newGroupView(boolean isExpanded, ViewGroup parent) { return mInflater.inflate(isExpanded ? mExpandedGroupLayout : mCollapsedGroupLayout, parent, false); } }