ExpandableListView的例子
1. 定义groupItem和chidrenItem的layout,略;
2. 实现继承BaseExpandableListAdapter的类,如下:
public class MyExpandableListViewAdapter extends BaseExpandableListAdapter{ private String[] mGroupTypes = new String[] { "好友", "陌生人", "黑名单" }; private String[][] mGroupMembers = new String[][] { { "好友一", "好友二", "好友三", "好友四", "好友五" }, { "陌生人一", "陌生人二", "陌生人三", "陌生人四", "陌生人五", "陌生人六" }, { "黑名单一", "黑名单二", "黑名单三", "黑名四" } }; private LayoutInflater mLayoutInflater; private OnChildItemClickListener mOnChildItemClickListener; public MyExpandableListViewAdapter(Context context) { mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getGroupCount() { return mGroupTypes.length; } @Override public Object getGroup(int groupPosition) { return mGroupTypes[groupPosition]; } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public int getChildrenCount(int groupPosition) { return mGroupMembers[groupPosition].length; } @Override public Object getChild(int groupPosition, int childPosition) { return mGroupMembers[groupPosition][childPosition]; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return true; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { GroupViewHolder groupViewHolder; if (convertView == null) { groupViewHolder = new GroupViewHolder(); convertView = mLayoutInflater.inflate(R.layout.groupitem, null); groupViewHolder.mGroupInfo = (TextView) convertView.findViewById(R.id.expandablelistview_groupitem_info); groupViewHolder.mGroupIcon = (ImageView) convertView.findViewById(R.id.expandablelistview_groupitem_icon); convertView.setTag(groupViewHolder); } else { groupViewHolder = (GroupViewHolder) convertView.getTag(); } if (isExpanded) groupViewHolder.mGroupIcon.setImageResource(R.drawable.ic_uparrows); else groupViewHolder.mGroupIcon.setImageResource(R.drawable.ic_downarrows); groupViewHolder.mGroupInfo.setText(mGroupTypes[groupPosition]); return convertView; } private final class GroupViewHolder { TextView mGroupInfo; ImageView mGroupIcon; } @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ChildViewHolder viewHolder; if (convertView == null) { viewHolder = new ChildViewHolder(); convertView = mLayoutInflater.inflate(R.layout.childitem, null); viewHolder.mChildInfoItem = (RelativeLayout) convertView.findViewById(R.id.paylist_item); viewHolder.mChildItemInfo = (TextView) convertView.findViewById(R.id.paylist_item_goldtv); convertView.setTag(viewHolder); } else { viewHolder = (ChildViewHolder) convertView.getTag(); } viewHolder.mChildItemInfo.setText(mGroupMembers[groupPosition][childPosition]); viewHolder.mChildInfoItem.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { mOnChildItemClickListener.onChildItemClicked(groupPosition, childPosition); } }); return convertView; } private final class ChildViewHolder { RelativeLayout mChildInfoItem; TextView mChildItemInfo; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } public interface OnChildItemClickListener { public void onChildItemClicked(int groupPosition, int childPosition); } public void setOnChildItemClickListener(OnChildItemClickListener onChildItemClickListener) { mOnChildItemClickListener = onChildItemClickListener; }}
3. Activity中使用该适配器:
public class MainActivity extends Activity implements OnGroupExpandListener, OnChildItemClickListener{ private ExpandableListView mExpandableListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mExpandableListView = (ExpandableListView) findViewById(R.id.activity_main_expandablelistview); mExpandableListView.setDivider(null); mExpandableListView.setOnGroupExpandListener((OnGroupExpandListener) this); MyExpandableListViewAdapter adapter = new MyExpandableListViewAdapter(this); mExpandableListView.setAdapter(adapter); adapter.setOnChildItemClickListener(this); } @Override public void onGroupExpand(int groupPosition) { for (int i = 0, count = mExpandableListView.getExpandableListAdapter().getGroupCount(); i < count; i++) { if (groupPosition != i) { // 关闭其他分组 mExpandableListView.collapseGroup(i); } } } @Override public void onChildItemClicked(int groupPosition, int childPosition) { Toast.makeText(this, "点击了" + groupPosition + "下的" + childPosition, Toast.LENGTH_SHORT).show(); }}