Android 购物车 高仿淘宝
比下边的高级的购物车下载地址
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 购物车 高仿淘宝相关推荐
- android版高仿淘宝客户端源码V2.3
android版高仿淘宝客户端源码V2.3,这个版本我已经更新到2.3了,源码也上传到源码天堂那里了,大家可以看一下吧,该应用实现了我们常用的购物功能了,也就是在手机上进行网购的流程的,如查看产品(浏 ...
- 高仿淘宝和聚美优品商城详情页实现《IT蓝豹》
高仿淘宝和聚美优品商城详情页实现 android-vertical-slide-view高仿淘宝和聚美优品商城详情页实现,在商品详情页,向上拖动时,可以加载下一页. 使用ViewDragHelper, ...
- 高仿淘宝分页:jQuery分页插件kkpager-Array-专题视频课程
高仿淘宝分页:jQuery分页插件kkpager-503人已学习 课程介绍 天底下万能的分页 课程收益 让所有人不再为分页所苦恼 讲师介绍 Array 更多讲师课程 ...
- 微信小程序 三级分类(高仿淘宝页面分类)
** 三级分类(高仿淘宝页面分类) ** 初步的二级页面参考的这个文章的代码:https://blog.csdn.net/luowei85520/article/details/90510311 这个 ...
- 伯乐发卡系统高级版源码 高仿淘宝模板 带用户中心
介绍: 内置高仿淘宝模板,带用户中心 分销代理等等 推荐使用宝塔面板安装,设置运行目录为public,测试环境为php7.0 mysql5.5 伪静态选择为thinkphp 授权已经去了,后台是/h ...
- Android studio(仿淘宝java实现)
记录一下大三第一学期首次接触Android studio,本人真的是个菜鸡,不喜勿喷. 首先分享一下我 ...
- H5高仿淘宝(html模板)
[实例截图] [核心代码] H5仿淘宝移动端大型综合购物商城app模板 ├── car.html ├── class.html ├── find.html ├── index.html ├── my- ...
- 高仿淘宝购物车分分钟让你集成
前言 做商城类电商app购物车确实一直是一个难点,为什么难呢? 主要原因呢是他里面的逻辑复杂,然后 百度的资源好像都不太理想,好多就是一个简单的listView来实现根本就达不到开发的需求.然后 一般 ...
- 【Android 动画】仿淘宝加入购物车动画实现(附件demo)
在开发详情页时,我们需要实现这样一个下面这样的动画. 在看到这个动画设计的时候,我就想到"京东"和"淘宝"的加入购物车的动画. 话不多说,讲一下这个动画的实现原 ...
最新文章
- 同济大学计算机云南2019,同济大学录取分数线2019(在各省市录取数据)
- 微信小程序电子画板canvas2d签名小程序插件绝对可用
- linux下进程的tty,Linux下TTY驱动程序分析
- Leetcode 188.买卖股票的最佳时机IV
- Android开发——异步任务中Activity销毁时的问题
- docker registry私有仓库搭建(为k3s准备)
- 使用flex和bison实现的sql引擎解析
- GARFIELD@11-20-2004
- 【04】Effective Java - 类和接口
- WebStorm如何设置默认游览器
- mono webservice问题请教
- 那些不需要你知道的Chrome DevTool - 使用技巧篇
- 微带天线:介质的材料分析
- 计算机专业电子技术基础教学,计算机专业“电子技术基础”教学上的难题及对策.doc...
- 美国Appstore游戏数据分析
- Matlab导入excel数据
- iOS 15 正式版发布,210 条改进大汇总
- xp计算机用户密码设置,WinXP怎样给电脑设密码?WinXP给电脑设密码的方法
- centos查看磁盘转速_Centos磁盘读写检测进行性能判断
- LC振荡电路以及考虑寄生参数时MOS管开通关断分析
热门文章
- 2011级-csdn-java-张侃— JDBC开发—连接池(二)
- android电视分辨率是多少合适,怎么调电视分辨率 电视机分辨率多少合适
- webstorm 介绍
- SQLAlchemy一对多,多对多操作
- 针尖对麦茫?风马牛不相及!BBE和SRS WOW看仔细
- 怎么提取短视频中的文字?元引擎可以轻松做到
- javascript核心(二)
- 红外视频图像行人检测算法综述
- OKHttp3实现文件下载,断点下载,暂停下载
- 计算机学院生物信息学,生物信息学专业本科生培养方案-哈尔滨工业大学计算机学院.pdf...