一些记录,或许以后能用。
上图
列表效果
选择之后的效果
上代码了。
布局文件activity_expandable_list_view.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_margin="5dip" android:text="菜单" android:textColor="#808080" android:textSize="28.0dip" /> <Button android:id="@+id/shopMsubmit" android:layout_width="60dip" android:layout_height="30dip" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="5dip" android:background="@drawable/order_submit" android:text="提交菜单" android:textColor="@android:color/white" android:textSize="12.0dip" /> </RelativeLayout> <ExpandableListView android:id="@+id/expandableListView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:clickable="false" android:divider="@android:color/white" android:focusable="false" android:focusableInTouchMode="false" android:groupIndicator="@drawable/expandable_icon" > </ExpandableListView> </LinearLayout>
<?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="wrap_content" android:background="@android:color/white" android:orientation="horizontal" > <TextView android:id="@+id/groupName" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="30dip" android:gravity="center_vertical" android:text="菜名" android:textColor="#008000" android:textSize="22.0dip" /> </LinearLayout>
<?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="25dip" android:orientation="horizontal" android:background="@android:color/white" > <CheckBox android:id="@+id/childCheckBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@drawable/checkbox_icon" android:layout_gravity="center_vertical" android:layout_marginLeft="40dip" /> <TextView android:id="@+id/childName" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="菜名" android:textColor="@android:color/black" android:textSize="14.0dip" /> </LinearLayout>
ExpandableListViewDemo.java
package com.example.expandablelistview; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ExpandableListView; import android.widget.Toast; /** * 界面 * @author Sanpark * @since 2013-11-23 * */ public class ExpandableListViewDemo extends Activity { private List<String> groupDatas;// 父列表数据 private List<List<HashMap<String, String>>> childDatas;// 子列表数据 private ExpandableListView expandableListView; private MyExpandableListViewAdapter ex_adapter; private Button order_submit; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_expandable_list_view); InitDatas(); InitView(); } private void InitView() { order_submit = (Button) findViewById(R.id.shopMsubmit); expandableListView = (ExpandableListView) findViewById(R.id.expandableListView); ex_adapter = new MyExpandableListViewAdapter(this, groupDatas, childDatas); expandableListView.setAdapter(ex_adapter); // 提交操作 order_submit.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { List<List<HashMap<Integer, Boolean>>> childCheckBoxState = ex_adapter.childCheckBoxState; String options = "选择的项是:"; List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); //循环childCheckBoxState状态,匹配childDatas的值 for (int j = 0; j < ex_adapter.getGroupCount(); j++) { for (int i = 0; i < ex_adapter.getChildrenCount(j); i++) { if (childCheckBoxState.get(j).get(i).get(i) == true) { @SuppressWarnings("unchecked") HashMap<String, Object> map = (HashMap<String, Object>) ex_adapter .getChild(j, i); String name = map.get("name").toString(); String price = (String) map.get("price"); options += "\n" + name + "." + price; list.add(map); } } } Toast.makeText(getApplicationContext(), options, Toast.LENGTH_SHORT).show(); } }); } // 初始化数据 private void InitDatas() { groupDatas = new ArrayList<String>(); childDatas = new ArrayList<List<HashMap<String, String>>>(); addInfo("炒菜类", new String[] { "番茄鸡蛋", "茄子豆角", "清炒苦瓜" }, new String[] { "9.00", "10.00", "8.00" }); addInfo("汤类", new String[] { "番茄蛋汤", "紫菜蛋汤" }, new String[] { "9.00", "10.00" }); addInfo("盖饭类", new String[] { "土豆牛肉盖饭", "红烧茄子盖饭", "青椒肉丝盖饭" }, new String[] { "15.00", "12.00", "14.00" }); } // 添加数据方法 private void addInfo(String group, String[] childs, String[] price) { groupDatas.add(group); List<HashMap<String, String>> childItem = new ArrayList<HashMap<String, String>>(); for (int i = 0; i < childs.length; i++) { HashMap<String, String> map = new HashMap<String, String>(); map.put("name", childs[i]); map.put("price", price[i]); childItem.add(map); } childDatas.add(childItem); } }
package com.example.expandablelistview; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.TextView; /** * ExpandableListView适配器 * * @author Sanpark * @since 2013-11-23 */ public class MyExpandableListViewAdapter extends BaseExpandableListAdapter { private Context context; private List<String> groupDatas; private List<List<HashMap<String, String>>> childDatas; // 子列表checkBox的状态记录,数据结构与子列表数据一样 public List<List<HashMap<Integer, Boolean>>> childCheckBoxState = new ArrayList<List<HashMap<Integer,Boolean>>>(); public MyExpandableListViewAdapter(Context context, List<String> groupDatas, List<List<HashMap<String, String>>> childDatas) { super(); this.context = context; this.groupDatas = groupDatas; this.childDatas = childDatas; InitCheckBoxState(); } // 初始化checkBox状态,默认所有checkBox未选中 public void InitCheckBoxState() { for (int i = 0; i < groupDatas.size(); i++) { List<HashMap<Integer, Boolean>> item = new ArrayList<HashMap<Integer, Boolean>>(); for (int j = 0; j < childDatas.get(i).size(); j++) { HashMap<Integer, Boolean> map = new HashMap<Integer, Boolean>(); map.put(j, false); item.add(map); } childCheckBoxState.add(item); } } @Override public Object getChild(int groupPosition, int childPosition) { return childDatas.get(groupPosition).get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = LayoutInflater.from(context).inflate( R.layout.foodchild_item, null); holder = new ViewHolder(); holder.name = (TextView) convertView.findViewById(R.id.childName); holder.box = (CheckBox) convertView .findViewById(R.id.childCheckBox); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.name.setText(childDatas.get(groupPosition).get(childPosition) .get("name").toString()); holder.box.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton arg0, boolean isChecked) { if (isChecked) { childCheckBoxState.get(groupPosition).get(childPosition) .put(childPosition, true); } else { childCheckBoxState.get(groupPosition).get(childPosition) .put(childPosition, false); } } }); // 按状态初始化checkBox,避免父列表收缩打开checkBox混乱 holder.box.setChecked(childCheckBoxState.get(groupPosition) .get(childPosition).get(childPosition) == false ? false : true); return convertView; } @Override public int getChildrenCount(int groupPosition) { return childDatas.get(groupPosition).size(); } @Override public Object getGroup(int groupPosition) { return groupDatas.get(groupPosition); } @Override public int getGroupCount() { return groupDatas.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = LayoutInflater.from(context).inflate( R.layout.foodgroup_item, null); holder = new ViewHolder(); holder.name = (TextView) convertView.findViewById(R.id.groupName); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.name.setText(groupDatas.get(groupPosition).toString()); return convertView; } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } static class ViewHolder { TextView name; CheckBox box; } }
转载请注明出处:http://my.oschina.net/u/726360/admin/edit-blog?blog=178352
源码已上传CSDN:http://download.csdn.net/detail/just_sanpark/6598061