public abstract class BaseExpandableListAdapter extends Object implements ExpandableListAdapterHeterogeneousExpandableList
相当于BaseAdatper,只不过多了一套分组的List。
private class ExpandableAdapter extends BaseExpandableListAdapter { Activity activity; private List<GroupRecord> groupArray; private List<List<UserRecord>> childArray; public ExpandableAdapter(Activity a) { activity = a; } public ExpandableAdapter(Activity a,List<GroupRecord> groupArray,List<List<UserRecord>> childArray) { activity = a; this.groupArray = groupArray; this.childArray = childArray; } public Object getChild(int groupPosition, int childPosition) { if(childArray==null || childArray.size()==0){ return null; }else{ return childArray.get(groupPosition).get(childPosition); } } public long getChildId(int groupPosition, int childPosition) { return childPosition; } public int getChildrenCount(int groupPosition) { if(childArray==null || childArray.size()==0){ return 0; }else{ return childArray.get(groupPosition).size(); } } class UserViewHolder { public ImageView profileImage; public TextView userText; ...... } public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { if(childArray.size()>groupPosition){ List<UserRecord> uList = childArray.get(groupPosition); if(uList!=null && uList.size()>0){ UserRecord user = uList.get(childPosition); UserViewHolder childVH; if(convertView==null){ convertView = LayoutInflater.from(activity).inflate( R.layout.group_user, parent, false); childVH = new UserViewHolder(); childVH.profileImage = (ImageView)convertView.findViewById(R.id.child_image); childVH.userText = (TextView)convertView.findViewById(R.id.child_name); ... convertView.setTag(childVH); }else{ childVH = (UserViewHolder)convertView.getTag(); } childVH.userText.setText(user.screenName); childVH.userPhone.setText(user.phone==null?"":user.phone); ... convertView.setTag(childVH); convertView.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { UserViewHolder userVHTemp = (UserViewHolder)v.getTag(); Intent intent = ProfileActivity.createIntent(userVHTemp.user.id); startActivity(intent); } }); } } return convertView; } // group method stub public Object getGroup(int groupPosition) { if(groupArray==null){ return null; }else{ return groupArray.get(groupPosition); } } public int getGroupCount() { if(groupArray==null){ return 0; }else{ return groupArray.size(); } } public long getGroupId(int groupPosition) { return groupPosition; } class GroupViewHolder { public TextView groupName; public ImageButton groupButton; public int nGroupPosition; public boolean bGroupExpanded; } public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if(groupArray.size()>groupPosition){ GroupRecord group = groupArray.get(groupPosition); GroupViewHolder groupVH; if(convertView==null){ convertView = LayoutInflater.from(activity).inflate( R.layout.group, parent, false); groupVH = new GroupViewHolder(); groupVH.groupName = ((TextView)convertView.findViewById(R.id.group_name)); groupVH.groupButton = ((ImageButton)convertView.findViewById(R.id.group_button)); convertView.setTag(groupVH); }else{ groupVH = (GroupViewHolder)convertView.getTag(); } groupVH.groupName.setText(group.name+" ["+group.relaNum+"]"); groupVH.bGroupExpanded = isExpanded; groupVH.nGroupPosition = groupPosition; if(isExpanded){ groupVH.groupButton.setVisibility(View.VISIBLE); }else{ groupVH.groupButton.setVisibility(View.INVISIBLE); } groupVH.groupButton.setTag(menuDialog); ...... convertView.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { GroupViewHolder groupVHTemp = (GroupViewHolder)v.getTag(); if(!groupVHTemp.bGroupExpanded){ selGroupPosition = groupVHTemp.nGroupPosition; doRetrieve(); }else{ mGroupList.collapseGroup(groupVHTemp.nGroupPosition); } } }); } return convertView; } public boolean hasStableIds() { return false; } public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }