比下边的高级的购物车下载地址
http://download.csdn.net/download/wyj1369/10038262
先上图

接下来我就上代码啦
main布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayout
        android:id="@+id/top_bar"android:layout_width="match_parent"android:layout_height="48dp"android:background="@drawable/topbar_background"android:orientation="vertical" ><RelativeLayout
            android:layout_width="match_parent"android:layout_height="48dp"android:background="@android:color/transparent"android:orientation="vertical" ><ImageView
                android:id="@+id/back"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_gravity="center_vertical"android:padding="12dp"android:src="@drawable/topbar_up" /><TextView
                android:id="@+id/title"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:minHeight="48dp"android:text="购物车"android:textColor="#1a1a1a"android:textSize="16sp" /><TextView
                android:id="@+id/subtitle"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginRight="12dp"android:gravity="center"android:minHeight="48dp"android:text=""android:textColor="#1a1a1a"android:textSize="14sp"android:visibility="visible" /></RelativeLayout></LinearLayout><ExpandableListView
        android:id="@+id/exListView"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:childIndicator="@null"android:groupIndicator="@null" ></ExpandableListView><LinearLayout
        android:layout_width="match_parent"android:layout_height="50dp"android:orientation="horizontal" ><LinearLayout
            android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="2.5"android:gravity="center_vertical"android:orientation="horizontal" ><CheckBox
                android:id="@+id/all_chekbox"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10dp"android:layout_marginRight="4dp"android:button="@drawable/check_box_bg"android:checkMark="?android:attr/listChoiceIndicatorMultiple"android:gravity="center"android:minHeight="64dp"android:paddingLeft="10dp"android:textAppearance="?android:attr/textAppearanceLarge"android:visibility="visible" /><TextView
                android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:text="合计:"android:textSize="16sp"android:textStyle="bold" /><TextView
                android:id="@+id/tv_total_price"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="¥0.00"android:textColor="@color/purple"android:textSize="16sp"android:textStyle="bold" /></LinearLayout><TextView
            android:id="@+id/tv_delete"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:background="@color/orange"android:clickable="true"android:gravity="center"android:text="删除"android:textColor="#FAFAFA" /><TextView
            android:id="@+id/tv_go_to_pay"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:background="@color/crimson"android:clickable="true"android:gravity="center"android:text="结算(0)"android:textColor="#FAFAFA" /></LinearLayout></LinearLayout>`

`布局文件 item_shopcart_group.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="wrap_content"android:background="@color/white"android:orientation="vertical" ><RelativeLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@android:color/white" ><CheckBox
            android:id="@+id/determine_chekbox"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10dp"android:layout_marginRight="4dp"android:button="@drawable/check_box_bg"android:checkMark="?android:attr/listChoiceIndicatorMultiple"android:gravity="center"android:minHeight="38dp"android:minWidth="32dp"android:textAppearance="?android:attr/textAppearanceLarge"android:visibility="visible" /><TextView
            android:id="@+id/tv_source_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_marginBottom="10dp"android:layout_marginTop="10dp"android:layout_toRightOf="@id/determine_chekbox"android:background="@android:color/white"android:drawableLeft="@drawable/shop_ico"android:drawablePadding="10dp"android:drawableRight="@drawable/s_jr_ico"android:text="第八号当铺"android:textColor="@color/grey_color2"android:textSize="@dimen/txt_14" /></RelativeLayout></LinearLayout>

第二个布局 item_shopcart_product.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="wrap_content"android:orientation="vertical" ><View
        android:layout_width="match_parent"android:layout_height="1dp"android:background="#CCCCCC" /><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/page_backgroup"android:orientation="horizontal" ><CheckBox
            android:id="@+id/check_box"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="10dp"android:layout_marginRight="4dp"android:button="@drawable/check_box_bg"android:checkMark="?android:attr/listChoiceIndicatorMultiple"android:gravity="center"android:minHeight="64dp"android:minWidth="32dp"android:textAppearance="?android:attr/textAppearanceLarge"android:visibility="visible" /><ImageView
            android:id="@+id/iv_adapter_list_pic"android:layout_width="85dp"android:layout_height="85dp"android:layout_marginBottom="15dp"android:layout_marginTop="13dp"android:scaleType="centerCrop"android:src="@drawable/psb" /><RelativeLayout
            android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginLeft="13dp" ><TextView
                android:id="@+id/tv_intro"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginRight="10dp"android:layout_marginTop="20dp"android:ellipsize="end"android:maxLines="2"android:text="第八号当铺美女一枚"android:textColor="@color/grey_color1"android:textSize="@dimen/txt_14" /><RelativeLayout
                android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_marginBottom="30dp"android:orientation="horizontal" ><TextView
                    android:id="@+id/tv_price"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:singleLine="true"android:text="¥ 308.00"android:textColor="@color/orange_color"android:textSize="@dimen/txt_14"android:textStyle="bold" /><TextView
                    android:id="@+id/tv_type_size"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:layout_toRightOf="@+id/tv_price"android:singleLine="true"android:text="( 4L )"android:textColor="@color/grey_color3"android:textSize="@dimen/txt_10"android:visibility="gone" /><LinearLayout
                    android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:layout_marginRight="15dp"android:orientation="horizontal" ><TextView
                        android:id="@+id/tv_reduce"android:layout_width="25dp"android:layout_height="25dp"android:background="@drawable/text_angle_gray"android:gravity="center"android:text="一"android:textColor="@color/grey_color1"android:textSize="@dimen/txt_12" /><TextView
                        android:id="@+id/tv_num"android:layout_width="25dp"android:layout_height="25dp"android:background="@drawable/text_angle"android:gravity="center"android:singleLine="true"android:text="1"android:textColor="@color/grey_color1"android:textSize="@dimen/txt_12" /><TextView
                        android:id="@+id/tv_add"android:layout_width="25dp"android:layout_height="25dp"android:background="@drawable/text_angle_right"android:gravity="center"android:text="+"android:textColor="@color/grey_color1"android:textSize="@dimen/txt_12" /></LinearLayout></RelativeLayout></RelativeLayout></LinearLayout></LinearLayout>

配置文件字体

 <!-- 字体大小 --><dimen name="txt_8">8sp</dimen><dimen name="txt_10">10sp</dimen><dimen name="txt_12">12sp</dimen><dimen name="txt_14">14sp</dimen><dimen name="txt_16">16sp</dimen><dimen name="txt_18">18sp</dimen><dimen name="txt_20">20sp</dimen><dimen name="txt_22">22sp</dimen><dimen name="txt_24">24sp</dimen><dimen name="txt_26">26sp</dimen><dimen name="txt_28">28sp</dimen>

颜色`

<?xml version="1.0" encoding="utf-8"?>
<resources><!-- 列表分割线   色值#999999 --><color name="list_divider">#999999</color><!-- 选中态色块   色值#D7D7D7 --><color name="list_item_pressed">#D7D7D7</color><color name="white">#ffffff</color><!-- 白色 --><color name="ivory">#fffff0</color><!-- 象牙色 --><color name="lightyellow">#ffffe0</color><color name="capture_text_cover_bg">#3060a4e3</color><!-- 亮黄色 --><color name="yellow">#ffff00</color><!-- 黄色 --><color name="snow">#fffafa</color><!-- 雪白色 --><color name="floralwhite">#fffaf0</color><!-- 花白色 --><color name="lemonchiffon">#fffacd</color><!-- 柠檬绸色 --><color name="cornsilk">#fff8dc</color><!-- 米绸色 --><color name="seaShell">#fff5ee</color><!-- 海贝色 --><color name="lavenderblush">#fff0f5</color><!-- 淡紫红 --><color name="papayawhip">#ffefd5</color><!-- 番木色 --><color name="blanchedalmond">#ffebcd</color><!-- 白杏色 --><color name="mistyrose">#ffe4e1</color><!-- 浅玫瑰色 --><color name="bisque">#ffe4c4</color><!-- 桔黄色 --><color name="moccasin">#ffe4b5</color><!-- 鹿皮色 --><color name="navajowhite">#ffdead</color><!-- 纳瓦白 --><color name="peachpuff">#ffdab9</color><!-- 桃色 --><color name="gold">#ffd700</color><!-- 金色 --><color name="pink">#ffc0cb</color><!-- 粉红色 --><color name="lightpink">#ffb6c1</color><!-- 亮粉红色 --><color name="orange">#fd7903</color><!-- 橙色 --><color name="lightsalmon">#ffa07a</color><!-- 亮肉色 --><color name="darkorange">#ff8c00</color><!-- 暗桔黄色 --><color name="coral">#ff7f50</color><!-- 珊瑚色 --><color name="hotpink">#ff69b4</color><!-- 热粉红色 --><color name="tomato">#ff6347</color><!-- 西红柿色 --><color name="orangered">#ff4500</color><!-- 红橙色 --><color name="deeppink">#ff1493</color><!-- 深粉红色 --><color name="fuchsia">#ff00ff</color><!-- 紫红色 --><color name="magenta">#ff00ff</color><!-- 红紫色 --><color name="red">#ff0000</color><!-- 红色 --><color name="oldlace">#fdf5e6</color><!-- 老花色 --><color name="lightgoldenrodyellow">#fafad2</color><!-- 亮金黄色 --><color name="linen">#faf0e6</color><!-- 亚麻色 --><color name="antiquewhite">#faebd7</color><!-- 古董白 --><color name="salmon">#fa8072</color><!-- 鲜肉色 --><color name="ghostwhite">#f8f8ff</color><!-- 幽灵白 --><color name="mintcream">#f5fffa</color><!-- 薄荷色 --><color name="whitesmoke">#f5f5f5</color><!-- 烟白色 --><color name="beige">#f5f5dc</color><!-- 米色 --><color name="wheat">#f5deb3</color><!-- 浅黄色 --><color name="sandybrown">#f4a460</color><!-- 沙褐色 --><color name="azure">#f0ffff</color><!-- 天蓝色 --><color name="honeydew">#f0fff0</color><!-- 蜜色 --><color name="aliceblue">#f0f8ff</color><!-- 艾利斯兰 --><color name="khaki">#f0e68c</color><!-- 黄褐色 --><color name="lightcoral">#f08080</color><!-- 亮珊瑚色 --><color name="palegoldenrod">#eee8aa</color><!-- 苍麒麟色 --><color name="violet">#ee82ee</color><!-- 紫罗兰色 --><color name="darksalmon">#e9967a</color><!-- 暗肉色 --><color name="lavender">#e6e6fa</color><!-- 淡紫色 --><color name="lightcyan">#e0ffff</color><!-- 亮青色 --><color name="burlywood">#deb887</color><!-- 实木色 --><color name="plum">#dda0dd</color><!-- 洋李色 --><color name="gainsboro">#dcdcdc</color><!-- 淡灰色 --><color name="crimson">#dc143c</color><!-- 暗深红色 --><color name="palevioletred">#db7093</color><!-- 苍紫罗兰色 --><color name="goldenrod">#daa520</color><!-- 金麒麟色 --><color name="orchid">#da70d6</color><!-- 淡紫色 --><color name="thistle">#d8bfd8</color><!-- 蓟色 --><color name="lightgray">#d3d3d3</color><!-- 亮灰色 --><color name="lightgrey">#d3d3d3</color><!-- 亮灰色 --><color name="tan">#d2b48c</color><!-- 茶色 --><color name="chocolate">#d2691e</color><!-- 巧可力色 --><color name="peru">#cd853f</color><!-- 秘鲁色 --><color name="indianred">#cd5c5c</color><!-- 印第安红 --><color name="mediumvioletred">#c71585</color><!-- 中紫罗兰色 --><color name="silver">#c0c0c0</color><!-- 银色 --><color name="darkkhaki">#bdb76b</color><!-- 暗黄褐色 --><color name="rosybrown">#bc8f8f</color><!-- 褐玫瑰红 --><color name="mediumorchid">#ba55d3</color><!-- 中粉紫色 --><color name="darkgoldenrod">#b8860b</color><!-- 暗金黄色 --><color name="firebrick">#b22222</color><!-- 火砖色 --><color name="powderblue">#b0e0e6</color><!-- 粉蓝色 --><color name="lightsteelblue">#b0c4de</color><!-- 亮钢兰色 --><color name="paleturquoise">#afeeee</color><!-- 苍宝石绿 --><color name="greenyellow">#adff2f</color><!-- 黄绿色 --><color name="lightblue">#add8e6</color><!-- 亮蓝色 --><color name="darkgray">#a9a9a9</color><!-- 暗灰色 --><color name="darkgrey">#a9a9a9</color><!-- 暗灰色 --><color name="brown">#a52a2a</color><!-- 褐色 --><color name="sienna">#a0522d</color><!-- 赭色 --><color name="darkorchid">#9932cc</color><!-- 暗紫色 --><color name="palegreen">#98fb98</color><!-- 苍绿色 --><color name="darkviolet">#9400d3</color><!-- 暗紫罗兰色 --><color name="mediumpurple">#9370db</color><!-- 中紫色 --><color name="lightgreen">#90ee90</color><!-- 亮绿色 --><color name="darkseagreen">#8fbc8f</color><!-- 暗海兰色 --><color name="saddlebrown">#8b4513</color><!-- 重褐色 --><color name="darkmagenta">#8b008b</color><!-- 暗洋红 --><color name="darkred">#8b0000</color><!-- 暗红色 --><color name="blueviolet">#8a2be2</color><!-- 紫罗兰蓝色 --><color name="lightskyblue">#87cefa</color><!-- 亮天蓝色 --><color name="skyblue">#87ceeb</color><!-- 天蓝色 --><color name="gray">#808080</color><!-- 灰色 --><color name="grey">#7c7b7b</color><!-- 灰色 --><color name="olive">#808000</color><!-- 橄榄色 --><color name="purple">#800080</color><!-- 紫色 --><color name="maroon">#800000</color><!-- 粟色 --><color name="aquamarine">#7fffd4</color><!-- 碧绿色 --><color name="chartreuse">#7fff00</color><!-- 黄绿色 --><color name="lawngreen">#7cfc00</color><!-- 草绿色 --><color name="mediumslateblue">#7b68ee</color><!-- 中暗蓝色 --><color name="lightslategray">#778899</color><!-- 亮蓝灰 --><color name="lightslategrey">#778899</color><!-- 亮蓝灰 --><color name="slategray">#708090</color><!-- 灰石色 --><color name="slategrey">#708090</color><!-- 灰石色 --><color name="olivedrab">#6b8e23</color><!-- 深绿褐色 --><color name="slateblue">#6a5acd</color><!-- 石蓝色 --><color name="dimgray">#696969</color><!-- 暗灰色 --><color name="dimgrey">#696969</color><!-- 暗灰色 --><color name="mediumaquamarine">#66cdaa</color><!-- 中绿色 --><color name="cornflowerblue">#6495ed</color><!-- 菊兰色 --><color name="cadetblue">#5f9ea0</color><!-- 军兰色 --><color name="darkolivegreen">#556b2f</color><!-- 暗橄榄绿 --><color name="indigo">#4b0082</color><!-- 靛青色 --><color name="mediumturquoise">#48d1cc</color><!-- 中绿宝石 --><color name="darkslateblue">#483d8b</color><!-- 暗灰蓝色 --><color name="steelblue">#4682b4</color><!-- 钢兰色 --><color name="royalblue">#4169e1</color><!-- 皇家蓝 --><color name="turquoise">#40e0d0</color><!-- 青绿色 --><color name="mediumseagreen">#3cb371</color><!-- 中海蓝 --><color name="limegreen">#32cd32</color><!-- 橙绿色 --><color name="darkslategray">#2f4f4f</color><!-- 暗瓦灰色 --><color name="darkslategrey">#2f4f4f</color><!-- 暗瓦灰色 --><color name="seagreen">#2e8b57</color><!-- 海绿色 --><color name="forestgreen">#228b22</color><!-- 森林绿 --><color name="lightseagreen">#20b2aa</color><!-- 亮海蓝色 --><color name="dodgerblue">#1e90ff</color><!-- 闪兰色 --><color name="midnightblue">#191970</color><!-- 中灰兰色 --><color name="aqua">#00ffff</color><!-- 浅绿色 --><color name="cyan">#00ffff</color><!-- 青色 --><color name="springgreen">#00ff7f</color><!-- 春绿色 --><color name="lime">#00ff00</color><!-- 酸橙色 --><color name="mediumspringgreen">#00fa9a</color><!-- 中春绿色 --><color name="darkturquoise">#00ced1</color><!-- 暗宝石绿 --><color name="deepskyblue">#00bfff</color><!-- 深天蓝色 --><color name="darkcyan">#008b8b</color><!-- 暗青色 --><color name="teal">#008080</color><!-- 水鸭色 --><color name="green">#008000</color><!-- 绿色 --><color name="darkgreen">#006400</color><!-- 暗绿色 --><color name="blue">#005dc1</color><!-- 蓝色 --><color name="mediumblue">#0000cd</color><!-- 中兰色 --><color name="darkblue">#00008b</color><!-- 暗蓝色 --><color name="navy">#000080</color><!-- 海军色 --><color name="black">#3B3B3B</color><!-- 黑色 --><!-- #2b4f6d 退改签 、选择配送信息中地址 文字的颜色值 --><!-- 通用颜色统一风格 --><color name="text_click">#0174E1</color><color name="table_background">#cbcbcb</color><color name="background">#eaeaea</color><color name="light_white">#fcfcfc</color><color name="tab_main_color">#1e1d1d</color><color name="comm_bg">#eaeaea</color><!-- 加黑 --><color name="comm_text_black">#464646</color><!-- 常用左侧文字颜色 --><color name="comm_text_left">#3c3c3c</color><!-- 常用右侧文字颜色 --><color name="comm_text_right">#3c3c3c</color><color name="comm_text_red">#da1609</color><color name="comm_text_blue">#0f90e3</color><color name="comm_text_green">#66c058</color><color name="comm_text_yellow">#DAE532</color><color name="comm_button_blue">#0074E1</color><!-- 常用提示文字颜色 --><color name="comm_text_tips">#949494</color><!-- 分割线颜色 --><color name="comm_cutline">#c4c4c4</color><!-- 内容条目按下时的样式 --><color name="pressed_bg">#f2f2f2</color><color name="nopressed_bg">#fff</color><!-- 助手内容颜色 --><color name="title_content_color">#484848</color><color name="content_color">#7d7d7d</color><!-- 理财 --><color name="new_red">#D21A3E</color><color name="new_red_press">#B41131</color><color name="text_black">#515151</color><color name="text_left">#646464</color><color name="text_right">#a1a1a1</color><color name="text_gray">#b5b5b5</color><color name="cutline_gray">#c4c4c4</color><color name="text_yellow">#b18500</color><color name="btn_bg_gray">#f7f7f7</color><color name="new_green">#00FF99</color><!-- 首页快捷菜单 --><color name="menu_item_bg">#f6f6f6</color><color name="text_tips">#929292</color><!-- 账户总览 --><color name="text_left_account">#464646</color><color name="text_bom_account">#464646</color><!-- 品质生活 商品列表 --><color name="text_price_red">#ed3b3b</color><color name="text_sold_greay">#b0b0b0</color><color name="text_title_black">#232323</color><!-- 帮助中心-常见问题 --><color name="text_question">#333333</color><color name="text_answer">#777777</color><color name="result_view">#b0000000</color><color name="viewfinder_mask">#60000000</color><color name="possible_result_points">#c0ffff00</color><color name="transparent">#00000000</color><color name="comm_card_bg">#ffffff</color><color name="grey_50">#fafafa</color><color name="grey_200">#eeeeee</color><color name="btn_blue">#0067db</color><!-- 右边菜单点击颜色 --><color name="right_menu_unpressed">#CDCEC9</color><color name="right_menu_pressed">#C3C3C3</color><color name="menu_item_press">#2e000000</color><color name="page_backgroup">#f2f2f2</color><!-- 灰色 --><color name="grey_color1">#333333</color><color name="grey_color2">#666666</color><color name="grey_color3">#999999</color><!-- 橙色 --><color name="orange_color">#de6838</color></resources>

适配器 ShopcartExpandableListViewAdapter

package com.jock.adapter;import java.util.List;
import java.util.Map;import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.TextView;import com.jock.entity.GroupInfo;
import com.jock.entity.ProductInfo;
import com.jock.shopcar.R;public class ShopcartExpandableListViewAdapter extends BaseExpandableListAdapter
{private List<GroupInfo> groups;private Map<String, List<ProductInfo>> children;private Context context;//HashMap<Integer, View> groupMap = new HashMap<Integer, View>();//HashMap<Integer, View> childrenMap = new HashMap<Integer, View>();private CheckInterface checkInterface;private ModifyCountInterface modifyCountInterface;/*** 构造函数* * @param groups*            组元素列表* @param children*            子元素列表* @param context*/public ShopcartExpandableListViewAdapter(List<GroupInfo> groups, Map<String, List<ProductInfo>> children, Context context){super();this.groups = groups;this.children = children;this.context = context;}public void setCheckInterface(CheckInterface checkInterface){this.checkInterface = checkInterface;}public void setModifyCountInterface(ModifyCountInterface modifyCountInterface){this.modifyCountInterface = modifyCountInterface;}@Overridepublic int getGroupCount(){return groups.size();}@Overridepublic int getChildrenCount(int groupPosition){String groupId = groups.get(groupPosition).getId();return children.get(groupId).size();}@Overridepublic Object getGroup(int groupPosition){return groups.get(groupPosition);}@Overridepublic Object getChild(int groupPosition, int childPosition){List<ProductInfo> childs = children.get(groups.get(groupPosition).getId());return childs.get(childPosition);}@Overridepublic long getGroupId(int groupPosition){return 0;}@Overridepublic long getChildId(int groupPosition, int childPosition){return 0;}@Overridepublic boolean hasStableIds(){return false;}@Overridepublic View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent){GroupHolder gholder;if (convertView == null){gholder = new GroupHolder();convertView = View.inflate(context, R.layout.item_shopcart_group, null);gholder.cb_check = (CheckBox) convertView.findViewById(R.id.determine_chekbox);gholder.tv_group_name = (TextView) convertView.findViewById(R.id.tv_source_name);//groupMap.put(groupPosition, convertView);convertView.setTag(gholder);} else{// convertView = groupMap.get(groupPosition);gholder = (GroupHolder) convertView.getTag();}final GroupInfo group = (GroupInfo) getGroup(groupPosition);if (group != null){gholder.tv_group_name.setText(group.getName());gholder.cb_check.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){group.setChoosed(((CheckBox) v).isChecked());checkInterface.checkGroup(groupPosition, ((CheckBox) v).isChecked());// 暴露组选接口}});gholder.cb_check.setChecked(group.isChoosed());}return convertView;}@Overridepublic View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent){final ChildHolder cholder;if (convertView == null){cholder = new ChildHolder();convertView = View.inflate(context, R.layout.item_shopcart_product, null);cholder.cb_check = (CheckBox) convertView.findViewById(R.id.check_box);cholder.tv_product_desc = (TextView) convertView.findViewById(R.id.tv_intro);cholder.tv_price = (TextView) convertView.findViewById(R.id.tv_price);cholder.iv_increase = (TextView) convertView.findViewById(R.id.tv_add);cholder.iv_decrease = (TextView) convertView.findViewById(R.id.tv_reduce);cholder.tv_count = (TextView) convertView.findViewById(R.id.tv_num);// childrenMap.put(groupPosition, convertView);convertView.setTag(cholder);} else{// convertView = childrenMap.get(groupPosition);cholder = (ChildHolder) convertView.getTag();}final ProductInfo product = (ProductInfo) getChild(groupPosition, childPosition);if (product != null){cholder.tv_product_desc.setText(product.getDesc());cholder.tv_price.setText("¥" + product.getPrice() + "");cholder.tv_count.setText(product.getCount() + "");cholder.cb_check.setChecked(product.isChoosed());cholder.cb_check.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){product.setChoosed(((CheckBox) v).isChecked());cholder.cb_check.setChecked(((CheckBox) v).isChecked());checkInterface.checkChild(groupPosition, childPosition, ((CheckBox) v).isChecked());// 暴露子选接口}});cholder.iv_increase.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){modifyCountInterface.doIncrease(groupPosition, childPosition, cholder.tv_count, cholder.cb_check.isChecked());// 暴露增加接口}});cholder.iv_decrease.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){modifyCountInterface.doDecrease(groupPosition, childPosition, cholder.tv_count, cholder.cb_check.isChecked());// 暴露删减接口}});}return convertView;}@Overridepublic boolean isChildSelectable(int groupPosition, int childPosition){return false;}/*** 组元素绑定器* * */private class GroupHolder{CheckBox cb_check;TextView tv_group_name;}/*** 子元素绑定器* * */private class ChildHolder{CheckBox cb_check;TextView tv_product_name;TextView tv_product_desc;TextView tv_price;TextView iv_increase;TextView tv_count;TextView iv_decrease;}/*** 复选框接口* * */public interface CheckInterface{/*** 组选框状态改变触发的事件* * @param groupPosition*            组元素位置* @param isChecked*            组元素选中与否*/public void checkGroup(int groupPosition, boolean isChecked);/*** 子选框状态改变时触发的事件* * @param groupPosition*            组元素位置* @param childPosition*            子元素位置* @param isChecked*            子元素选中与否*/public void checkChild(int groupPosition, int childPosition, boolean isChecked);}/*** 改变数量的接口* * */public interface ModifyCountInterface{/*** 增加操作* * @param groupPosition*            组元素位置* @param childPosition*            子元素位置* @param showCountView*            用于展示变化后数量的View* @param isChecked*            子元素选中与否*/public void doIncrease(int groupPosition, int childPosition, View showCountView, boolean isChecked);/*** 删减操作* * @param groupPosition*            组元素位置* @param childPosition*            子元素位置* @param showCountView*            用于展示变化后数量的View* @param isChecked*            子元素选中与否*/public void doDecrease(int groupPosition, int childPosition, View showCountView, boolean isChecked);}}

bean类1

package com.jock.entity;public class BaseInfo
{protected String Id;protected String name;protected boolean isChoosed;public BaseInfo(){super();}public BaseInfo(String id, String name){super();Id = id;this.name = name;}public String getId(){return Id;}public void setId(String id){Id = id;}public String getName(){return name;}public void setName(String name){this.name = name;}public boolean isChoosed(){return isChoosed;}public void setChoosed(boolean isChoosed){this.isChoosed = isChoosed;}}

bean2

package com.jock.entity;public class GroupInfo extends BaseInfo
{public GroupInfo(){super();}public GroupInfo(String id, String name){super(id, name);// TODO Auto-generated constructor stub}}

bean类3

package com.jock.entity;public class ProductInfo extends BaseInfo
{private String imageUrl;private String desc;private double price;private int count;private int position;// 绝对位置,只在ListView构造的购物车中,在删除时有效public ProductInfo(){super();}public ProductInfo(String id, String name, String imageUrl, String desc, double price, int count){super.Id = id;super.name = name;this.imageUrl = imageUrl;this.desc = desc;this.price = price;this.count = count;}public String getImageUrl(){return imageUrl;}public void setImageUrl(String imageUrl){this.imageUrl = imageUrl;}public String getDesc(){return desc;}public void setDesc(String desc){this.desc = desc;}public int getCount(){return count;}public void setCount(int count){this.count = count;}public double getPrice(){return price;}public void setPrice(double price){this.price = price;}public int getPosition(){return position;}public void setPosition(int position){this.position = position;}}

main中的代码

package com.jock.shopcart;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.TextView;
import android.widget.Toast;import com.jock.adapter.ShopcartExpandableListViewAdapter;
import com.jock.adapter.ShopcartExpandableListViewAdapter.CheckInterface;
import com.jock.adapter.ShopcartExpandableListViewAdapter.ModifyCountInterface;
import com.jock.entity.GroupInfo;
import com.jock.entity.ProductInfo;
import com.jock.shopcar.R;public class MainActivity extends Activity implements CheckInterface, ModifyCountInterface, OnClickListener
{private ExpandableListView exListView;private CheckBox cb_check_all;private TextView tv_total_price;private TextView tv_delete;private TextView tv_go_to_pay;private Context context;private double totalPrice = 0.00;// 购买的商品总价private int totalCount = 0;// 购买的商品总数量private ShopcartExpandableListViewAdapter selva;private List<GroupInfo> groups = new ArrayList<GroupInfo>();// 组元素数据列表private Map<String, List<ProductInfo>> children = new HashMap<String, List<ProductInfo>>();// 子元素数据列表@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);initView();initEvents();}private void initView(){context = this;virtualData();exListView = (ExpandableListView) findViewById(R.id.exListView);cb_check_all = (CheckBox) findViewById(R.id.all_chekbox);tv_total_price = (TextView) findViewById(R.id.tv_total_price);tv_delete = (TextView) findViewById(R.id.tv_delete);tv_go_to_pay = (TextView) findViewById(R.id.tv_go_to_pay);}private void initEvents(){selva = new ShopcartExpandableListViewAdapter(groups, children, this);selva.setCheckInterface(this);// 关键步骤1,设置复选框接口selva.setModifyCountInterface(this);// 关键步骤2,设置数量增减接口exListView.setAdapter(selva);for (int i = 0; i < selva.getGroupCount(); i++){exListView.expandGroup(i);// 关键步骤3,初始化时,将ExpandableListView以展开的方式呈现}cb_check_all.setOnClickListener(this);tv_delete.setOnClickListener(this);tv_go_to_pay.setOnClickListener(this);}/*** 模拟数据<br>* 遵循适配器的数据列表填充原则,组元素被放在一个List中,对应的组元素下辖的子元素被放在Map中,<br>* 其键是组元素的Id(通常是一个唯一指定组元素身份的值)*/private void virtualData(){for (int i = 0; i < 6; i++){groups.add(new GroupInfo(i + "", "第八号当铺" + (i + 1) + "号店"));List<ProductInfo> products = new ArrayList<ProductInfo>();for (int j = 0; j <= i; j++){products.add(new ProductInfo(j + "", "商品", "", groups.get(i).getName() + "的第" + (j + 1) + "个商品", 120.00 + i * j, 1));}children.put(groups.get(i).getId(), products);// 将组元素的一个唯一值,这里取Id,作为子元素List的Key}}@Overridepublic void onClick(View v){AlertDialog alert;switch (v.getId()){case R.id.all_chekbox:doCheckAll();break;case R.id.tv_go_to_pay:if (totalCount == 0){Toast.makeText(context, "请选择要支付的商品", Toast.LENGTH_LONG).show();return;}alert = new AlertDialog.Builder(context).create();alert.setTitle("操作提示");alert.setMessage("总计:\n" + totalCount + "种商品\n" + totalPrice + "元");alert.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){return;}});alert.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){return;}});alert.show();break;case R.id.tv_delete:if (totalCount == 0){Toast.makeText(context, "请选择要移除的商品", Toast.LENGTH_LONG).show();return;}alert = new AlertDialog.Builder(context).create();alert.setTitle("操作提示");alert.setMessage("您确定要将这些商品从购物车中移除吗?");alert.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){return;}});alert.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){doDelete();}});alert.show();break;}}/*** 删除操作<br>* 1.不要边遍历边删除,容易出现数组越界的情况<br>* 2.现将要删除的对象放进相应的列表容器中,待遍历完后,以removeAll的方式进行删除*/protected void doDelete(){List<GroupInfo> toBeDeleteGroups = new ArrayList<GroupInfo>();// 待删除的组元素列表for (int i = 0; i < groups.size(); i++){GroupInfo group = groups.get(i);if (group.isChoosed()){toBeDeleteGroups.add(group);}List<ProductInfo> toBeDeleteProducts = new ArrayList<ProductInfo>();// 待删除的子元素列表List<ProductInfo> childs = children.get(group.getId());for (int j = 0; j < childs.size(); j++){if (childs.get(j).isChoosed()){toBeDeleteProducts.add(childs.get(j));}}childs.removeAll(toBeDeleteProducts);}groups.removeAll(toBeDeleteGroups);selva.notifyDataSetChanged();calculate();}@Overridepublic void doIncrease(int groupPosition, int childPosition, View showCountView, boolean isChecked){ProductInfo product = (ProductInfo) selva.getChild(groupPosition, childPosition);int currentCount = product.getCount();currentCount++;product.setCount(currentCount);((TextView) showCountView).setText(currentCount + "");selva.notifyDataSetChanged();calculate();}@Overridepublic void doDecrease(int groupPosition, int childPosition, View showCountView, boolean isChecked){ProductInfo product = (ProductInfo) selva.getChild(groupPosition, childPosition);int currentCount = product.getCount();if (currentCount == 1)return;currentCount--;product.setCount(currentCount);((TextView) showCountView).setText(currentCount + "");selva.notifyDataSetChanged();calculate();}@Overridepublic void checkGroup(int groupPosition, boolean isChecked){GroupInfo group = groups.get(groupPosition);List<ProductInfo> childs = children.get(group.getId());for (int i = 0; i < childs.size(); i++){childs.get(i).setChoosed(isChecked);}if (isAllCheck())cb_check_all.setChecked(true);elsecb_check_all.setChecked(false);selva.notifyDataSetChanged();calculate();}@Overridepublic void checkChild(int groupPosition, int childPosiTion, boolean isChecked){boolean allChildSameState = true;// 判断改组下面的所有子元素是否是同一种状态GroupInfo group = groups.get(groupPosition);List<ProductInfo> childs = children.get(group.getId());for (int i = 0; i < childs.size(); i++){if (childs.get(i).isChoosed() != isChecked){allChildSameState = false;break;}}if (allChildSameState){group.setChoosed(isChecked);// 如果所有子元素状态相同,那么对应的组元素被设为这种统一状态} else{group.setChoosed(false);// 否则,组元素一律设置为未选中状态}if (isAllCheck())cb_check_all.setChecked(true);elsecb_check_all.setChecked(false);selva.notifyDataSetChanged();calculate();}private boolean isAllCheck(){for (GroupInfo group : groups){if (!group.isChoosed())return false;}return true;}/** 全选与反选 */private void doCheckAll(){for (int i = 0; i < groups.size(); i++){groups.get(i).setChoosed(cb_check_all.isChecked());GroupInfo group = groups.get(i);List<ProductInfo> childs = children.get(group.getId());for (int j = 0; j < childs.size(); j++){childs.get(j).setChoosed(cb_check_all.isChecked());}}selva.notifyDataSetChanged();}/*** 统计操作<br>* 1.先清空全局计数器<br>* 2.遍历所有子元素,只要是被选中状态的,就进行相关的计算操作<br>* 3.给底部的textView进行数据填充*/private void calculate(){totalCount = 0;totalPrice = 0.00;for (int i = 0; i < groups.size(); i++){GroupInfo group = groups.get(i);List<ProductInfo> childs = children.get(group.getId());for (int j = 0; j < childs.size(); j++){ProductInfo product = childs.get(j);if (product.isChoosed()){totalCount++;totalPrice += product.getPrice() * product.getCount();}}}tv_total_price.setText("¥" + totalPrice);tv_go_to_pay.setText("去支付(" + totalCount + ")");}
}

就这样啦一些没有的drawable文件没有也不影响运行
把他注释或删除到

Android 购物车 高仿淘宝相关推荐

  1. android版高仿淘宝客户端源码V2.3

    android版高仿淘宝客户端源码V2.3,这个版本我已经更新到2.3了,源码也上传到源码天堂那里了,大家可以看一下吧,该应用实现了我们常用的购物功能了,也就是在手机上进行网购的流程的,如查看产品(浏 ...

  2. 高仿淘宝和聚美优品商城详情页实现《IT蓝豹》

    高仿淘宝和聚美优品商城详情页实现 android-vertical-slide-view高仿淘宝和聚美优品商城详情页实现,在商品详情页,向上拖动时,可以加载下一页. 使用ViewDragHelper, ...

  3. 高仿淘宝分页:jQuery分页插件kkpager-Array-专题视频课程

    高仿淘宝分页:jQuery分页插件kkpager-503人已学习 课程介绍         天底下万能的分页 课程收益     让所有人不再为分页所苦恼 讲师介绍     Array 更多讲师课程   ...

  4. 微信小程序 三级分类(高仿淘宝页面分类)

    ** 三级分类(高仿淘宝页面分类) ** 初步的二级页面参考的这个文章的代码:https://blog.csdn.net/luowei85520/article/details/90510311 这个 ...

  5. 伯乐发卡系统高级版源码 高仿淘宝模板 带用户中心

    介绍: 内置高仿淘宝模板,带用户中心  分销代理等等 推荐使用宝塔面板安装,设置运行目录为public,测试环境为php7.0 mysql5.5 伪静态选择为thinkphp 授权已经去了,后台是/h ...

  6. Android studio(仿淘宝java实现)

                       记录一下大三第一学期首次接触Android studio,本人真的是个菜鸡,不喜勿喷.                               首先分享一下我 ...

  7. H5高仿淘宝(html模板)

    [实例截图] [核心代码] H5仿淘宝移动端大型综合购物商城app模板 ├── car.html ├── class.html ├── find.html ├── index.html ├── my- ...

  8. 高仿淘宝购物车分分钟让你集成

    前言 做商城类电商app购物车确实一直是一个难点,为什么难呢? 主要原因呢是他里面的逻辑复杂,然后 百度的资源好像都不太理想,好多就是一个简单的listView来实现根本就达不到开发的需求.然后 一般 ...

  9. 【Android 动画】仿淘宝加入购物车动画实现(附件demo)

    在开发详情页时,我们需要实现这样一个下面这样的动画. 在看到这个动画设计的时候,我就想到"京东"和"淘宝"的加入购物车的动画. 话不多说,讲一下这个动画的实现原 ...

最新文章

  1. 同济大学计算机云南2019,同济大学录取分数线2019(在各省市录取数据)
  2. 微信小程序电子画板canvas2d签名小程序插件绝对可用
  3. linux下进程的tty,Linux下TTY驱动程序分析
  4. Leetcode 188.买卖股票的最佳时机IV
  5. Android开发——异步任务中Activity销毁时的问题
  6. docker registry私有仓库搭建(为k3s准备)
  7. 使用flex和bison实现的sql引擎解析
  8. GARFIELD@11-20-2004
  9. 【04】Effective Java - 类和接口
  10. WebStorm如何设置默认游览器
  11. mono webservice问题请教
  12. 那些不需要你知道的Chrome DevTool - 使用技巧篇
  13. 微带天线:介质的材料分析
  14. 计算机专业电子技术基础教学,计算机专业“电子技术基础”教学上的难题及对策.doc...
  15. 美国Appstore游戏数据分析
  16. Matlab导入excel数据
  17. iOS 15 正式版发布,210 条改进大汇总
  18. xp计算机用户密码设置,WinXP怎样给电脑设密码?WinXP给电脑设密码的方法
  19. centos查看磁盘转速_Centos磁盘读写检测进行性能判断
  20. LC振荡电路以及考虑寄生参数时MOS管开通关断分析

热门文章

  1. 2011级-csdn-java-张侃— JDBC开发—连接池(二)
  2. android电视分辨率是多少合适,怎么调电视分辨率 电视机分辨率多少合适
  3. webstorm 介绍
  4. SQLAlchemy一对多,多对多操作
  5. 针尖对麦茫?风马牛不相及!BBE和SRS WOW看仔细
  6. 怎么提取短视频中的文字?元引擎可以轻松做到
  7. javascript核心(二)
  8. 红外视频图像行人检测算法综述
  9. OKHttp3实现文件下载,断点下载,暂停下载
  10. 计算机学院生物信息学,生物信息学专业本科生培养方案-哈尔滨工业大学计算机学院.pdf...