Adapter(9)BaseExpandableListAdapter
1.效果

2.BaseExpandableListFrgmt.java
public class BaseExpandableListFrgmt extends Fragment implements OnGroupClickListener{ private ExpandableListView expandListView; private CustomExpandableListAdapter expandAdapter; private ExpandGroup[] groups; private ExpandChild[][] children; public void setListViewGroupIndicator(Drawable groupIndicator){ expandListView.setGroupIndicator(groupIndicator); } private void initData() { int len = 5; groups = new ExpandGroup[len]; for (int i = 0; i < len; i++) { groups[i] = new ExpandGroup(); groups[i].icon_resid = R.drawable.ic_group; groups[i].title_txt = "group [" + i + "]"; groups[i].btn_txt = "btn [" + i + "]"; } children = new ExpandChild[len][10]; for (int i = 0; i < len; i++) { for (int j = 0; j < 10; j++) { children[i][j] = new ExpandChild(); children[i][j].icon_resid = R.drawable.ic_child3; children[i][j].title_txt = "child [" + i+"][" + j+"]"; children[i][j].content_txt = "content[" + i+"][" + j+"]"; children[i][j].button_txt = "child[" + i+"][" + j+"]"; } } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { initData(); View v = inflater.inflate(R.layout.frgmt_base_expandable_list_adpt, container, false); expandListView = (ExpandableListView) v .findViewById(R.id.vid_BaseExpandableListAdapter_list); expandAdapter = new CustomExpandableListAdapter(getActivity(), groups, children); expandListView.setAdapter(expandAdapter); expandListView.setGroupIndicator(null);//参数为分组图标,null表示为空,注释本行用系统默认的. expandListView.setOnGroupClickListener(this); return v; } @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { boolean isExpanded = expandListView.expandGroup(groupPosition); if (!isExpanded) { expandListView.collapseGroup(groupPosition); } return true; } }
3.自定义的adapter : CustomExpandableListAdapter.java
public class CustomExpandableListAdapter extends BaseExpandableListAdapter { private Context mContext; private LayoutInflater mInflater; private ExpandGroup[] groups; private ExpandChild[][] children; public CustomExpandableListAdapter(Context context, ExpandGroup[] groups, ExpandChild[][] children) { mContext = context; mInflater = LayoutInflater.from(context); this.groups = groups; this.children = children; } @Override public int getGroupCount() { return groups.length; } @Override public int getChildrenCount(int groupPosition) { return children[groupPosition].length; } @Override public Object getGroup(int groupPosition) { return groups[groupPosition]; } @Override public Object getChild(int groupPosition, int childPosition) { return children[groupPosition][childPosition]; } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { // Toast.makeText(mContext, "hasStableIds", Toast.LENGTH_SHORT).show(); return true; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { Toast.makeText(mContext, "这是第" + groupPosition + "组,第" + childPosition + "个", Toast.LENGTH_SHORT).show(); return true; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { ImageView icon; Button btn; TextView title; ExpandGroup group = (ExpandGroup) getGroup(groupPosition); if (null == convertView) { convertView = mInflater.inflate( R.layout.expand_list_group_base_adapter, null, false); } if (isExpanded) { convertView.setBackgroundColor(0x7fFFE1FF); }else{ convertView.setBackgroundColor(0x7fF8F8FF); } icon = (ImageView) convertView.findViewById(R.id.vid_icon_expand_group); title = (TextView) convertView.findViewById(R.id.vid_tv_expand_group); btn = (Button) convertView.findViewById(R.id.vid_btn_expand_group); title.setText(group.title_txt); btn.setText(group.btn_txt); final int pos = groupPosition; btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(mContext, "group ["+pos+"] clicked", Toast.LENGTH_SHORT) .show(); } }); return convertView; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ImageView icon; TextView title; TextView content; Button btn; ExpandChild data = (ExpandChild) getChild(groupPosition, childPosition); if (convertView == null) { convertView = mInflater.inflate( R.layout.expand_list_child_base_adapter, null, false); } icon = (ImageView) convertView .findViewById(R.id.vid_iv_icon_expand_child); title = (TextView) convertView .findViewById(R.id.vid_tv_title_expland_child); content = (TextView) convertView .findViewById(R.id.vid_tv_content_expand_child); btn = (Button) convertView.findViewById(R.id.vid_btn_expand_child); title.setText(data.title_txt); content.setText(data.content_txt); btn.setText(data.button_txt); final int pos = childPosition; btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(mContext, "child ["+pos+"] clicked", Toast.LENGTH_SHORT) .show(); } }); return convertView; } }
4.ExpandGroup.java
public class ExpandGroup { public int icon_resid; public String title_txt; public String btn_txt; }
5.ExpandChild.java
public class ExpandChild { public int icon_resid; public String title_txt; public String content_txt; public String button_txt; }
6.主布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ExpandableListView android:id="@+id/vid_BaseExpandableListAdapter_list" android:layout_width="match_parent" android:layout_height="match_parent" > </ExpandableListView> </LinearLayout>
7.expand_list_group_base_adapter.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <ImageView android:id="@+id/vid_icon_expand_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="52dp" android:src="@drawable/ic_group" /> <TextView android:id="@+id/vid_tv_expand_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/vid_btn_expand_group" android:layout_alignBottom="@+id/vid_btn_expand_group" android:layout_toRightOf="@+id/vid_icon_expand_group" android:text="TextView" /> <Button android:id="@+id/vid_btn_expand_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toRightOf="@+id/vid_tv_expand_group" android:focusable="false" android:text="Button" /> </RelativeLayout>
8.expand_list_child_base_adapter.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" android:orientation="horizontal" > <ImageView android:id="@+id/vid_iv_icon_expand_child" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:src="@drawable/ic_child5" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" android:layout_weight="1" android:orientation="vertical" > <TextView android:id="@+id/vid_tv_title_expland_child" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> <TextView android:id="@+id/vid_tv_content_expand_child" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> </LinearLayout> <Button android:id="@+id/vid_btn_expand_child" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Button" /> </LinearLayout>

浙公网安备 33010602011771号