您好,登录后才能下订单哦!
本文实例为大家分享了Rxjava Retrofit实现购物车的具体代码,供大家参考,具体内容如下
效果图:


1.依赖
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' compile 'com.jakewharton:butterknife:8.8.1' compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0' compile 'com.facebook.fresco:fresco:0.12.0' compile 'com.facebook.fresco:animated-base-support:0.12.0' compile 'com.facebook.fresco:animated-webp:0.12.0' compile 'com.facebook.fresco:webpsupport:0.12.0' compile 'io.reactivex.rxjava2:rxjava:2.1.7' compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'com.squareup.okhttp3:okhttp:3.9.0' compile 'com.google.code.gson:gson:2.8.1'
2.布局
1.加减器布局 layout_add_delete
<?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="horizontal" android:weightSum="1"> <TextView android:id="@+id/txt_delete" android:layout_width="30dp" android:layout_height="30dp" android:text="减" android:gravity="center" android:background="#8b948b"/> <EditText android:id="@+id/et_number" android:layout_marginTop="2dp" android:layout_width="50dp" android:layout_height="30dp" android:background="@drawable/edit" android:layout_weight="0.00" android:gravity="center" android:text="1"/> <TextView android:id="@+id/txt_add" android:layout_width="30dp" android:layout_height="30dp" android:text="加" android:gravity="center" android:background="#8b948b"/> </LinearLayout>
2. 商品详情布局   activity_main
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/my_image_view" android:layout_width="match_parent" android:layout_height="450dp" fresco:placeholderImage="@mipmap/ic_launcher" /> <TextView android:id="@+id/goods_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="a啊啊是你的" android:textSize="20dp" /> <TextView android:id="@+id/goods_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="¥ 18132" android:textColor="#dc5f2e" android:textSize="18dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="我是商家19" android:textSize="16dp" /> </LinearLayout> <LinearLayout android:layout_alignParentBottom="true" android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal"> <Button android:id="@+id/btn_addcart" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:background="#ffc207" android:text="加入购物车"/> <Button android:id="@+id/btn_shopping" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:background="#ff6b06" android:text="立即购买"/> </LinearLayout> </RelativeLayout>
3.购物车布局 activity_main2
<?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"> <!--头布局--> <LinearLayout android:id="@+id/top_bar" android:layout_width="match_parent" android:layout_height="48dp" android:background="#f7f7f7" 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="48dp" android:layout_height="48dp" android:layout_alignParentLeft="true" android:layout_gravity="center_vertical" android:padding="12dp" android:src="@drawable/back" /> <TextView 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/edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="40dp" 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:gravity="center_vertical" android:orientation="horizontal" > <CheckBox android:id="@+id/all_chekbox" android:layout_marginLeft="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="全选"/> <LinearLayout android:id="@+id/ll_info" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="4" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginRight="20dp" android:layout_weight="1" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="right" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:text="合计:" android:textSize="18sp" android:textStyle="bold" /> <TextView android:id="@+id/total_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="¥0.00" android:textColor="#f23232" android:textSize="16sp" android:textStyle="bold" /> </LinearLayout> <TextView android:id="@+id/total_number" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="共有商品:0件" android:gravity="right" android:textSize="16sp" android:textStyle="bold" /> </LinearLayout> <TextView android:id="@+id/tv_go_to_pay" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="3" android:background="#fd7a05" android:clickable="true" android:gravity="center" android:text="结算" android:textColor="#FAFAFA" /> <TextView android:id="@+id/tv_go_to_del" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="3" android:background="#e2231c" android:clickable="true" android:gravity="center" android:text="删除" android:textColor="#FAFAFA" android:visibility="gone" /> </LinearLayout> </LinearLayout> </LinearLayout>
4.二级列表组级布局 ex_group_item
<?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:background="#cfc3c3" android:orientation="horizontal"> <CheckBox android:id="@+id/group_checkbox" android:layout_marginLeft="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="false"/> <TextView android:id="@+id/shop_name" android:layout_marginLeft="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16dp" /> </LinearLayout>
5.二级列表子布局  ex_child_item
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="230dp" android:orientation="horizontal"> <CheckBox android:id="@+id/child_checkbox" android:layout_marginTop="50dp" android:layout_marginLeft="20dp" android:layout_marginBottom="50dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <RelativeLayout android:layout_marginLeft="20dp" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/shop_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="17dp" android:layout_marginStart="17dp" android:text="TextView" android:layout_alignParentTop="true" /> <!--<ImageView android:id="@+id/shop_img" android:layout_width="90dp" android:layout_height="90dp" android:layout_marginTop="30dp" app:srcCompat="@mipmap/ic_launcher" android:layout_below="@+id/shop_name" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" />--> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/shop_img" android:layout_width="90dp" android:layout_height="90dp" android:layout_marginTop="30dp" fresco:placeholderImage="@mipmap/ic_launcher" android:layout_below="@+id/shop_name" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:id="@+id/shop_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/shop_img" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" android:text="¥20" android:textColor="#f23232"/> <com.bwei.gepeng.myview.AddDeleteView android:id="@+id/adv" android:layout_width="160dp" android:layout_height="30dp" android:layout_below="@+id/shop_price" android:layout_marginTop="30dp" android:layout_marginLeft="140dp" app:left_text="-" app:right_text="+" app:middle_text="1" android:focusable="false" > </com.bwei.gepeng.myview.AddDeleteView> <Button android:id="@+id/shop_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:visibility="invisible" android:text="删除" /> </RelativeLayout> </LinearLayout>
3.实体类
1. MessageBean
package com.bwei.gepeng.entity; 
 
public class MessageBean <T>{ 
 
 
 private String code; 
 private T data; 
 private String msg; 
 private SellerBean seller; 
 
 public String getCode() { 
 return code; 
 } 
 
 public void setCode(String code) { 
 this.code = code; 
 } 
 
 public T getData() { 
 return data; 
 } 
 
 public void setData(T data) { 
 this.data = data; 
 } 
 
 public String getMsg() { 
 return msg; 
 } 
 
 public void setMsg(String msg) { 
 this.msg = msg; 
 } 
 
 public SellerBean getSeller() { 
 return seller; 
 } 
 
 public void setSeller(SellerBean seller) { 
 this.seller = seller; 
 } 
 
 
 
 public static class SellerBean { 
 /** 
  * description : 我是商家19 
  * icon : http://120.27.23.105/images/icon.png 
  * name : 商家19 
  * productNums : 999 
  * score : 5.0 
  * sellerid : 19 
  */ 
 
 private String description; 
 private String icon; 
 private String name; 
 private int productNums; 
 private double score; 
 private int sellerid; 
 
 public String getDescription() { 
  return description; 
 } 
 
 public void setDescription(String description) { 
  this.description = description; 
 } 
 
 public String getIcon() { 
  return icon; 
 } 
 
 public void setIcon(String icon) { 
  this.icon = icon; 
 } 
 
 public String getName() { 
  return name; 
 } 
 
 public void setName(String name) { 
  this.name = name; 
 } 
 
 public int getProductNums() { 
  return productNums; 
 } 
 
 public void setProductNums(int productNums) { 
  this.productNums = productNums; 
 } 
 
 public double getScore() { 
  return score; 
 } 
 
 public void setScore(double score) { 
  this.score = score; 
 } 
 
 public int getSellerid() { 
  return sellerid; 
 } 
 
 public void setSellerid(int sellerid) { 
  this.sellerid = sellerid; 
 } 
 } 
} 
2.GoodsShowBean
package com.bwei.gepeng.entity; 
 
public class GoodsShowBean { 
 
 private double bargainPrice; 
 private String createtime; 
 private String detailUrl; 
 private String images; 
 private int itemtype; 
 private int pid; 
 private double price; 
 private int pscid; 
 private int salenum; 
 private int sellerid; 
 private String subhead; 
 private String title; 
 
 public double getBargainPrice() { 
  return bargainPrice; 
 } 
 
 public void setBargainPrice(double bargainPrice) { 
  this.bargainPrice = bargainPrice; 
 } 
 
 public String getCreatetime() { 
  return createtime; 
 } 
 
 public void setCreatetime(String createtime) { 
  this.createtime = createtime; 
 } 
 
 public String getDetailUrl() { 
  return detailUrl; 
 } 
 
 public void setDetailUrl(String detailUrl) { 
  this.detailUrl = detailUrl; 
 } 
 
 public String getImages() { 
  return images; 
 } 
 
 public void setImages(String images) { 
  this.images = images; 
 } 
 
 public int getItemtype() { 
  return itemtype; 
 } 
 
 public void setItemtype(int itemtype) { 
  this.itemtype = itemtype; 
 } 
 
 public int getPid() { 
  return pid; 
 } 
 
 public void setPid(int pid) { 
  this.pid = pid; 
 } 
 
 public double getPrice() { 
  return price; 
 } 
 
 public void setPrice(double price) { 
  this.price = price; 
 } 
 
 public int getPscid() { 
  return pscid; 
 } 
 
 public void setPscid(int pscid) { 
  this.pscid = pscid; 
 } 
 
 public int getSalenum() { 
  return salenum; 
 } 
 
 public void setSalenum(int salenum) { 
  this.salenum = salenum; 
 } 
 
 public int getSellerid() { 
  return sellerid; 
 } 
 
 public void setSellerid(int sellerid) { 
  this.sellerid = sellerid; 
 } 
 
 public String getSubhead() { 
  return subhead; 
 } 
 
 public void setSubhead(String subhead) { 
  this.subhead = subhead; 
 } 
 
 public String getTitle() { 
  return title; 
 } 
 
 public void setTitle(String title) { 
  this.title = title; 
 } 
 
 @Override 
 public String toString() { 
 return "GoodsShowBean{" + 
  "bargainPrice=" + bargainPrice + 
  ", createtime='" + createtime + '\'' + 
  ", detailUrl='" + detailUrl + '\'' + 
  ", images='" + images + '\'' + 
  ", itemtype=" + itemtype + 
  ", pid=" + pid + 
  ", price=" + price + 
  ", pscid=" + pscid + 
  ", salenum=" + salenum + 
  ", sellerid=" + sellerid + 
  ", subhead='" + subhead + '\'' + 
  ", title='" + title + '\'' + 
  '}'; 
 } 
} 
3. CartBean
package com.bwei.gepeng.entity; 
 
import java.util.List; 
 
public class CartBean { 
 private String sellerName; 
 private String sellerid; 
 private List<ListBean> list; 
 
 public String getSellerName() { 
 return sellerName; 
 } 
 
 public void setSellerName(String sellerName) { 
 this.sellerName = sellerName; 
 } 
 
 public String getSellerid() { 
 return sellerid; 
 } 
 
 public void setSellerid(String sellerid) { 
 this.sellerid = sellerid; 
 } 
 
 public List<ListBean> getList() { 
 return list; 
 } 
 
 public void setList(List<ListBean> list) { 
 this.list = list; 
 } 
 
 public static class ListBean { 
 
 private double bargainPrice; 
 private String createtime; 
 private String detailUrl; 
 private String images; 
 private int num; 
 private int pid; 
 private double price; 
 private int pscid; 
 private int selected; 
 private int sellerid; 
 private String subhead; 
 private String title; 
 
 public double getBargainPrice() { 
  return bargainPrice; 
 } 
 
 public void setBargainPrice(double bargainPrice) { 
  this.bargainPrice = bargainPrice; 
 } 
 
 public String getCreatetime() { 
  return createtime; 
 } 
 
 public void setCreatetime(String createtime) { 
  this.createtime = createtime; 
 } 
 
 public String getDetailUrl() { 
  return detailUrl; 
 } 
 
 public void setDetailUrl(String detailUrl) { 
  this.detailUrl = detailUrl; 
 } 
 
 public String getImages() { 
  return images; 
 } 
 
 public void setImages(String images) { 
  this.images = images; 
 } 
 
 public int getNum() { 
  return num; 
 } 
 
 public void setNum(int num) { 
  this.num = num; 
 } 
 
 public int getPid() { 
  return pid; 
 } 
 
 public void setPid(int pid) { 
  this.pid = pid; 
 } 
 
 public double getPrice() { 
  return price; 
 } 
 
 public void setPrice(double price) { 
  this.price = price; 
 } 
 
 public int getPscid() { 
  return pscid; 
 } 
 
 public void setPscid(int pscid) { 
  this.pscid = pscid; 
 } 
 
 public int getSelected() { 
  return selected; 
 } 
 
 public void setSelected(int selected) { 
  this.selected = selected; 
 } 
 
 public int getSellerid() { 
  return sellerid; 
 } 
 
 public void setSellerid(int sellerid) { 
  this.sellerid = sellerid; 
 } 
 
 public String getSubhead() { 
  return subhead; 
 } 
 
 public void setSubhead(String subhead) { 
  this.subhead = subhead; 
 } 
 
 public String getTitle() { 
  return title; 
 } 
 
 public void setTitle(String title) { 
  this.title = title; 
 } 
 } 
 
 @Override 
 public String toString() { 
 return "CartBean{" + 
  "sellerName='" + sellerName + '\'' + 
  ", sellerid='" + sellerid + '\'' + 
  ", list=" + list + 
  '}'; 
 } 
} 
4. GroupBean
package com.bwei.gepeng.entity; 
 
public class GroupBean { 
 private String sellerName; 
 private boolean gropuCb; 
 
 public GroupBean(String sellerName, boolean gropuCb) { 
 this.sellerName = sellerName; 
 this.gropuCb = gropuCb; 
 } 
 
 public String getSellerName() { 
 return sellerName; 
 } 
 
 public void setSellerName(String sellerName) { 
 this.sellerName = sellerName; 
 } 
 
 public boolean isGropuCb() { 
 return gropuCb; 
 } 
 
 public void setGropuCb(boolean gropuCb) { 
 this.gropuCb = gropuCb; 
 } 
 
 @Override 
 public String toString() { 
 return "GroupBean{" + 
  "sellerName='" + sellerName + '\'' + 
  ", gropuCb=" + gropuCb + 
  '}'; 
 } 
} 
5.ChildBean
package com.bwei.gepeng.entity; 
 
public class ChildBean { 
 private String title; 
 private String images; 
 private double price; 
 private int num; 
 private boolean childCb; 
 private boolean btn; 
 private int pid; 
 
 
 public ChildBean(String title, String images, double price, int num, boolean childCb, boolean btn, int pid) { 
 this.title = title; 
 this.images = images; 
 this.price = price; 
 this.num = num; 
 this.childCb = childCb; 
 this.btn = btn; 
 this.pid = pid; 
 } 
 
 public int getPid() { 
 return pid; 
 } 
 
 public void setPid(int pid) { 
 this.pid = pid; 
 } 
 
 public boolean isBtn() { 
 return btn; 
 } 
 
 public void setBtn(boolean btn) { 
 this.btn = btn; 
 } 
 
 
 public String getTitle() { 
 return title; 
 } 
 
 public void setTitle(String title) { 
 this.title = title; 
 } 
 
 public String getImages() { 
 return images; 
 } 
 
 public void setImages(String images) { 
 this.images = images; 
 } 
 
 public double getPrice() { 
 return price; 
 } 
 
 public void setPrice(double price) { 
 this.price = price; 
 } 
 
 public int getNum() { 
 return num; 
 } 
 
 public void setNum(int num) { 
 this.num = num; 
 } 
 
 public boolean isChildCb() { 
 return childCb; 
 } 
 
 public void setChildCb(boolean childCb) { 
 this.childCb = childCb; 
 } 
 
 @Override 
 public String toString() { 
 return "ChildBean{" + 
  "title='" + title + '\'' + 
  ", images='" + images + '\'' + 
  ", price=" + price + 
  ", num=" + num + 
  ", childCb=" + childCb + 
  ", btn=" + btn + 
  ", pid=" + pid + 
  '}'; 
 } 
} 
4.接口
1.ApiService
package com.bwei.gepeng.http; 
 
 
import com.bwei.gepeng.entity.CartBean; 
import com.bwei.gepeng.entity.GoodsShowBean; 
import com.bwei.gepeng.entity.MessageBean; 
 
import java.util.List; 
import java.util.Map; 
 
import io.reactivex.Flowable; 
import retrofit2.http.GET; 
import retrofit2.http.QueryMap; 
 
public interface ApiService { 
 //查询商品详情75 
 //http://120.27.23.105/product/getProductDetail?pid=75&source=android 
 @GET("product/getProductDetail") 
 Flowable<MessageBean<GoodsShowBean>> getNews(@QueryMap Map<String,String> map); 
 
 //查询购物车 
 //http://120.27.23.105/product/getCarts?uid=3802&source=android 
 @GET("product/getCarts") 
 Flowable<MessageBean<List<CartBean>>> getCart(@QueryMap Map<String,String> map); 
 
 
 //删除购物车 
 //http://120.27.23.105/product/getCarts?uid=3802&source=android 
 @GET("product/deleteCart") 
 Flowable<MessageBean<List<CartBean>>> getDel(@QueryMap Map<String,String> map); 
 
 //添加购物车 
 //http://120.27.23.105/product/addCart?uid=3802&pid=75&source=android 
 @GET("product/addCart") 
 Flowable<MessageBean<List<CartBean>>> getAdd(@QueryMap Map<String,String> map); 
} 
2.IView
[java] view plain copy
public interface IView { 
 void OnSuccess(Object o,String tag); 
 void OnFailed(Exception e,String tag); 
} 
3.IPresenter
[java] view plain copy
import java.util.Map; 
 
public interface IPresenter { 
 void getData(Map<String,String> map, String tag); 
} 
4.IModel
[java] view plain copy
import java.util.Map; 
 
public interface IModel { 
 void getData(Map<String,String> map,String tag); 
} 
5.代码
1.自定义View 加减器 AddDeleteView
package com.bwei.gepeng.myview; 
 
import android.content.Context; 
import android.content.res.TypedArray; 
import android.graphics.Color; 
import android.util.AttributeSet; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
 
import com.bwei.gepeng.R; 
 
public class AddDeleteView extends LinearLayout { 
 private OnAddDelClickListener listener; 
 private EditText etNumber; 
 
 //对外提供一个点击的回调接口 
 public interface OnAddDelClickListener{ 
 void onAddClick(View v); 
 void onDelClick(View v); 
 } 
 
 public void setOnAddDelClickListener(OnAddDelClickListener listener){ 
 if(listener!=null){ 
  this.listener=listener; 
 } 
 } 
 
 public AddDeleteView(Context context) { 
 this(context,null); 
 } 
 
 public AddDeleteView(Context context, AttributeSet attrs) { 
 this(context, attrs,0); 
 } 
 
 public AddDeleteView(Context context, AttributeSet attrs, int defStyleAttr) { 
 super(context, attrs, defStyleAttr); 
 initView(context, attrs, defStyleAttr); 
 } 
 
 private void initView(Context context, AttributeSet attrs, int defStyleAttr) { 
 View.inflate(context, R.layout.layout_add_delete,this); 
 
 //获取控件 
 TextView txtDelete=findViewById(R.id.txt_delete); 
 TextView txtAdd=findViewById(R.id.txt_add); 
 etNumber = findViewById(R.id.et_number); 
 
 
 TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AddDeleteViewStyle); 
 
 String leftText = typedArray.getString(R.styleable.AddDeleteViewStyle_left_text); 
 String rightText = typedArray.getString(R.styleable.AddDeleteViewStyle_right_text); 
 String middleText = typedArray.getString(R.styleable.AddDeleteViewStyle_middle_text); 
 int color = typedArray.getColor(R.styleable.AddDeleteViewStyle_left_text_color, Color.RED); 
 
 txtDelete.setText(leftText); 
 txtAdd.setText(rightText); 
 etNumber.setText(middleText); 
 txtDelete.setTextColor(color); 
 
 //回收 
 typedArray.recycle(); 
 
 
 txtDelete.setOnClickListener(new OnClickListener() { 
  @Override 
  public void onClick(View view) { 
  listener.onDelClick(view); 
  } 
 }); 
 
 txtAdd.setOnClickListener(new OnClickListener() { 
  @Override 
  public void onClick(View view) { 
  listener.onAddClick(view); 
  } 
 }); 
 
 } 
 //对外提供一个修改数字的方法 
 public void setNumber(int number){ 
 if(number>0){ 
  etNumber.setText(number+""); 
 } 
 } 
 //对外提供一个获取当前数字的方法 
 public int getNumber(){ 
 String string = etNumber.getText().toString(); 
 int i = Integer.parseInt(string); 
 return i; 
 } 
 
} 
2.Retrofit工具类 RetrofitUtils
package com.bwei.gepeng.http; 
 
import java.io.IOException; 
 
import okhttp3.HttpUrl; 
import okhttp3.Interceptor; 
import okhttp3.OkHttpClient; 
import okhttp3.Request; 
import okhttp3.Response; 
import retrofit2.Retrofit; 
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; 
import retrofit2.converter.gson.GsonConverterFactory; 
 
public class RetrofitUtils { 
 private static volatile RetrofitUtils instance; 
 private final Retrofit retrofit; 
 
 private RetrofitUtils(){ 
 OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Logger()).build(); 
 
 retrofit = new Retrofit.Builder() 
  .client(client) 
  .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) 
  .addConverterFactory(GsonConverterFactory.create()) 
  .baseUrl("http://120.27.23.105/") 
  .build(); 
 } 
 
 public static RetrofitUtils getInstance(){ 
 if(instance==null){ 
  synchronized (RetrofitUtils.class){ 
  if(instance==null){ 
   instance=new RetrofitUtils(); 
  } 
  } 
 } 
 return instance; 
 } 
 
 public ApiService getApiService(){ 
 ApiService apiService = retrofit.create(ApiService.class); 
 return apiService; 
 } 
 
 class Logger implements Interceptor { 
 @Override 
 public Response intercept(Chain chain) throws IOException { 
  Request original = chain.request(); 
  HttpUrl url=original.url().newBuilder() 
   .addQueryParameter("source","android") 
   .build(); 
  //添加请求头 
  Request request = original.newBuilder() 
   .url(url) 
   .build(); 
  return chain.proceed(request); 
 } 
 } 
} 
3.M层
package com.bwei.gepeng.model; 
 
import com.bwei.gepeng.entity.CartBean; 
import com.bwei.gepeng.entity.GoodsShowBean; 
import com.bwei.gepeng.entity.MessageBean; 
import com.bwei.gepeng.http.RetrofitUtils; 
import com.bwei.gepeng.presenter.NewsPresenter; 
 
import java.util.List; 
import java.util.Map; 
 
import io.reactivex.Flowable; 
 
public class Model implements IModel{ 
 
 private NewsPresenter presenter; 
 public Model(NewsPresenter presenter) { 
 this.presenter = presenter; 
 } 
 
 @Override 
 public void getData(Map<String, String> map, String tag) { 
 if(tag.equals("cart")){ 
  Flowable<MessageBean<List<CartBean>>> flowable = RetrofitUtils.getInstance().getApiService().getCart(map); 
  presenter.get2(flowable,tag); 
 }else if(tag.equals("goods")){ 
  Flowable<MessageBean<GoodsShowBean>> flowable = RetrofitUtils.getInstance().getApiService().getNews(map); 
  presenter.get(flowable,tag); 
 }else if(tag.equals("del")){ 
  Flowable<MessageBean<List<CartBean>>> flowable = RetrofitUtils.getInstance().getApiService().getDel(map); 
  presenter.get3(flowable,tag); 
 }else if(tag.equals("add")){ 
  Flowable<MessageBean<List<CartBean>>> flowable = RetrofitUtils.getInstance().getApiService().getAdd(map); 
  presenter.get4(flowable,tag); 
 } 
 
 } 
} 
4.P层
package com.bwei.gepeng.presenter; 
 
import com.bwei.gepeng.entity.CartBean; 
import com.bwei.gepeng.entity.GoodsShowBean; 
import com.bwei.gepeng.entity.MessageBean; 
import com.bwei.gepeng.model.Model; 
import com.bwei.gepeng.view.IView; 
 
import java.util.List; 
import java.util.Map; 
 
import io.reactivex.Flowable; 
import io.reactivex.android.schedulers.AndroidSchedulers; 
import io.reactivex.schedulers.Schedulers; 
import io.reactivex.subscribers.DisposableSubscriber; 
 
public class NewsPresenter implements IPresenter{ 
 
 private IView iView; 
 private DisposableSubscriber<MessageBean<GoodsShowBean>> subscriber; 
 private DisposableSubscriber<MessageBean<List<CartBean>>> subscriber2; 
 private DisposableSubscriber<MessageBean<List<CartBean>>> subscriber3; 
 private DisposableSubscriber<MessageBean<List<CartBean>>> subscriber4; 
 
 public void attachView(IView iView){ 
 this.iView=iView; 
 } 
 
 @Override 
 public void getData(Map<String, String> map, String tag) { 
 Model model = new Model(this); 
 model.getData(map,tag); 
 } 
 
 public void detachView(){ 
 if(iView!=null){ 
  iView=null; 
 } 
 if(subscriber!=null){ 
  if(!subscriber.isDisposed()){ 
  subscriber.dispose(); 
  } 
 } 
 if(subscriber2!=null){ 
  if(!subscriber2.isDisposed()){ 
  subscriber2.dispose(); 
  } 
 } 
 if(subscriber3!=null){ 
  if(!subscriber3.isDisposed()){ 
  subscriber3.dispose(); 
  } 
 } 
 if(subscriber4!=null){ 
  if(!subscriber4.isDisposed()){ 
  subscriber4.dispose(); 
  } 
 } 
 } 
 
 //查询购物车 
 public void get(Flowable<MessageBean<GoodsShowBean>> flowable , final String tag) { 
 subscriber = flowable.subscribeOn(Schedulers.io()) 
  .observeOn(AndroidSchedulers.mainThread()) 
  .subscribeWith(new DisposableSubscriber<MessageBean<GoodsShowBean>>() { 
   @Override 
   public void onNext(MessageBean<GoodsShowBean> listMessageBean) { 
   if (listMessageBean != null) { 
    GoodsShowBean data = listMessageBean.getData(); 
    iView.OnSuccess(data,tag); 
   } 
   } 
 
   @Override 
   public void onError(Throwable t) { 
   iView.OnFailed(new Exception(t),tag); 
   } 
 
   @Override 
   public void onComplete() { 
 
   } 
  }); 
 } 
 
 //查询商品详情75 
 public void get2(Flowable<MessageBean<List<CartBean>>> flowable, final String tag) { 
 subscriber2 = flowable.subscribeOn(Schedulers.io()) 
  .observeOn(AndroidSchedulers.mainThread()) 
  .subscribeWith(new DisposableSubscriber<MessageBean<List<CartBean>>>() { 
   @Override 
   public void onNext(MessageBean<List<CartBean>> list) { 
   if (list != null) { 
    List<CartBean> data = list.getData(); 
    if(data!=null){ 
    iView.OnSuccess(data,tag); 
    } 
   } 
   } 
 
   @Override 
   public void onError(Throwable t) { 
   iView.OnFailed(new Exception(t),tag); 
   } 
 
   @Override 
   public void onComplete() { 
 
   } 
  }); 
 } 
 
 //删除购物车 
 public void get3(Flowable<MessageBean<List<CartBean>>> flowable, final String tag) { 
 subscriber3 = flowable.subscribeOn(Schedulers.io()) 
  .observeOn(AndroidSchedulers.mainThread()) 
  .subscribeWith(new DisposableSubscriber<MessageBean<List<CartBean>>>() { 
   @Override 
   public void onNext(MessageBean<List<CartBean>> list) { 
   if (list != null) { 
    String code = list.getMsg(); 
    iView.OnSuccess(code,tag); 
   } 
   } 
 
   @Override 
   public void onError(Throwable t) { 
   iView.OnFailed(new Exception(t),tag); 
   } 
 
   @Override 
   public void onComplete() { 
 
   } 
  }); 
 } 
 
 //添加购物车 
 public void get4(Flowable<MessageBean<List<CartBean>>> flowable, final String tag) { 
 subscriber4 = flowable.subscribeOn(Schedulers.io()) 
  .observeOn(AndroidSchedulers.mainThread()) 
  .subscribeWith(new DisposableSubscriber<MessageBean<List<CartBean>>>() { 
   @Override 
   public void onNext(MessageBean<List<CartBean>> list) { 
   if (list != null) { 
    String code = list.getMsg(); 
    iView.OnSuccess(code,tag); 
   } 
   } 
 
   @Override 
   public void onError(Throwable t) { 
   iView.OnFailed(new Exception(t),tag); 
   } 
 
   @Override 
   public void onComplete() { 
 
   } 
  }); 
 } 
} 
5.MainActivity 商品详情页面
package com.bwei.gepeng.view; 
 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.Toast; 
 
import com.bwei.gepeng.R; 
import com.bwei.gepeng.entity.GoodsShowBean; 
import com.bwei.gepeng.presenter.NewsPresenter; 
import com.facebook.drawee.view.SimpleDraweeView; 
 
import java.util.HashMap; 
import java.util.Map; 
 
import butterknife.BindView; 
import butterknife.ButterKnife; 
import butterknife.OnClick; 
 
public class MainActivity extends AppCompatActivity implements IView { 
 
 @BindView(R.id.my_image_view) 
 SimpleDraweeView myImageView; 
 @BindView(R.id.goods_title) 
 TextView goodsTitle; 
 @BindView(R.id.goods_price) 
 TextView goodsPrice; 
 private NewsPresenter presenter; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 ButterKnife.bind(this); 
 
 presenter = new NewsPresenter(); 
 presenter.attachView(this); 
 //http://120.27.23.105/product/getProductDetail?pid=75&source=android 
 Map<String, String> map = new HashMap<>(); 
 map.put("pid", "75"); 
 presenter.getData(map, "goods"); 
  
 } 
 
 @Override 
 public void OnSuccess(Object o, String tag) { 
 if (tag.equals("goods")) { 
  if (o != null) { 
  GoodsShowBean data = (GoodsShowBean) o; 
  //Log.e("Gp", "OnSuccess: " + data.toString()); 
 
  myImageView.setImageURI(data.getImages().split("\\|")[0]); 
  goodsTitle.setText(data.getTitle()); 
  goodsPrice.setText("¥ "+data.getPrice()); 
  } 
 }else if(tag.equals("add")){ 
  if (o != null) { 
  String msg = (String) o; 
  Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); 
  } 
 } 
 } 
 
 @Override 
 public void OnFailed(Exception e, String tag) { 
 
 } 
 
 @OnClick({R.id.btn_addcart, R.id.btn_shopping}) 
 public void onViewClicked(View view) { 
 switch (view.getId()) { 
  case R.id.btn_addcart: 
  Map<String, String> map = new HashMap<>(); 
  map.put("uid", "3802"); 
  map.put("pid", "75"); 
  presenter.getData(map, "add"); 
  //Toast.makeText(MainActivity.this,"添加成功",Toast.LENGTH_SHORT).show(); 
  break; 
  case R.id.btn_shopping: 
  Intent intent=new Intent(MainActivity.this,Main2Activity.class); 
  startActivity(intent); 
  break; 
 } 
 } 
} 
6.二级列表适配器 ExpandableAdapter
package com.bwei.gepeng.adapter; 
 
import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.TextView; 
import android.widget.Toast; 
 
import com.bwei.gepeng.R; 
import com.bwei.gepeng.entity.ChildBean; 
import com.bwei.gepeng.entity.GroupBean; 
import com.bwei.gepeng.myview.AddDeleteView; 
import com.bwei.gepeng.view.Main2Activity; 
import com.facebook.drawee.view.SimpleDraweeView; 
 
import java.util.ArrayList; 
import java.util.List; 
 
 
public class ExpandableAdapter extends BaseExpandableListAdapter { 
 private Context context; 
 private List<GroupBean> groupBeen=new ArrayList<>(); 
 private List<List<ChildBean>> childBeen=new ArrayList<>(); 
 
 private Main2Activity main; 
 
 public ExpandableAdapter(Context context, List<GroupBean> groupBeen, List<List<ChildBean>> childBeen) { 
 this.context = context; 
 this.groupBeen = groupBeen; 
 this.childBeen = childBeen; 
 this.main = (Main2Activity) context; 
 } 
 //接口回调 
 private onDeleteGoods onDleGoods; 
 
 public interface onDeleteGoods{ 
 void onDelGoods(int i,int i1,String pid); 
 } 
 
 public void setOnDeleteGoods(onDeleteGoods onDleGoods){ 
 this.onDleGoods=onDleGoods; 
 } 
 
 @Override 
 public int getGroupCount() { 
 return groupBeen.size(); 
 } 
 
 @Override 
 public int getChildrenCount(int i) { 
 return childBeen.get(i).size(); 
 } 
 
 @Override 
 public Object getGroup(int i) { 
 return groupBeen.get(i).getSellerName(); 
 } 
 
 @Override 
 public Object getChild(int i, int i1) { 
 return childBeen.get(i).get(i1).getTitle(); 
 } 
 
 @Override 
 public long getGroupId(int i) { 
 return i; 
 } 
 
 @Override 
 public long getChildId(int i, int i1) { 
 return i1; 
 } 
 
 @Override 
 public boolean hasStableIds() { 
 return false; 
 } 
 
 //一级组 
 @Override 
 public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) { 
 //加载视图 
 view=View.inflate(context, R.layout.ex_group_item ,null); 
 
 final CheckBox groupCb= view.findViewById(R.id.group_checkbox); 
 TextView shopName= view.findViewById(R.id.shop_name); 
 
 
 shopName.setText(groupBeen.get(i).getSellerName()); 
 groupCb.setChecked(groupBeen.get(i).isGropuCb()); 
 
 //组复选按钮 
 groupCb.setOnClickListener(new View.OnClickListener() { 
  @Override 
  public void onClick(View view) { 
  boolean gchecked = groupCb.isChecked(); 
  groupBeen.get(i).setGropuCb(gchecked); 
  //Main2Activity main= (Main2Activity) context; 
  for(GroupBean i: groupBeen){ 
   boolean gropuCb = i.isGropuCb(); 
   if(!gropuCb){ 
   main.allCheckbox.setChecked(false); 
   break; 
   }else{ 
   main.allCheckbox.setChecked(true); 
   } 
  } 
  int size = childBeen.get(i).size(); 
  if(gchecked){ 
   for(int r=0;r<size;r++){ 
   //Toast.makeText(context,"group按钮"+ gchecked+""+size, Toast.LENGTH_SHORT).show(); 
   childBeen.get(i).get(r).setChildCb(true); 
   } 
  }else{ 
   for(int r=0;r<size;r++){ 
   //Toast.makeText(context,"group按钮"+ gchecked+""+size, Toast.LENGTH_SHORT).show(); 
   childBeen.get(i).get(r).setChildCb(false); 
   } 
  } 
  notifyDataSetChanged(); 
  main.changesum(childBeen); 
  } 
 }); 
 return view; 
 } 
 
 //二级组 
 @Override 
 public View getChildView(final int i, final int i1, boolean b, View v, ViewGroup viewGroup) { 
 //加载视图 
 v=View.inflate(context, R.layout.ex_child_item ,null); 
 
 final CheckBox childCb = v.findViewById(R.id.child_checkbox); 
 TextView shopTitle= v.findViewById(R.id.shop_title); 
 TextView shopPrice= v.findViewById(R.id.shop_price); 
 //ImageView shopImg=v.findViewById(R.id.shop_img); 
 //draweeView.setImageURI(uri); 
 SimpleDraweeView shopImg = v.findViewById(R.id.shop_img); 
 final AddDeleteView adv = v.findViewById(R.id.adv); 
 Button shop_delete=v.findViewById(R.id.shop_delete); 
 
 childCb.setChecked(childBeen.get(i).get(i1).isChildCb()); 
 String images = childBeen.get(i).get(i1).getImages(); 
 //Glide.with(context).load(images).into(shopImg); 
 shopImg.setImageURI(images); 
 shopTitle.setText(childBeen.get(i).get(i1).getTitle()); 
 shopPrice.setText(childBeen.get(i).get(i1).getPrice()+""); 
 adv.setNumber(childBeen.get(i).get(i1).getNum()); 
 
 //final Main2Activity main= (Main2Activity) context; 
 //控制删除按钮的显隐 
 if(childBeen.get(i).get(i1).isBtn()){ 
  shop_delete.setVisibility(View.VISIBLE); 
 }else{ 
  shop_delete.setVisibility(View.INVISIBLE); 
 } 
 //删除按钮监听 
 shop_delete.setOnClickListener(new View.OnClickListener() { 
  @Override 
  public void onClick(View view) { 
 
  onDleGoods.onDelGoods(i,i1,childBeen.get(i).get(i1).getPid()+""); 
  } 
 }); 
 
 //加减器逻辑 
 adv.setOnAddDelClickListener(new AddDeleteView.OnAddDelClickListener() { 
  @Override 
  public void onAddClick(View v) { 
  int number = adv.getNumber(); 
  number++; 
  adv.setNumber(number); 
  childBeen.get(i).get(i1).setNum(number); 
  main.changesum(childBeen); 
  } 
 
  @Override 
  public void onDelClick(View v) { 
  int number = adv.getNumber(); 
  if(number==1){ 
   Toast.makeText(context,"用户最小数量为1",Toast.LENGTH_SHORT).show(); 
  } 
  number--; 
  adv.setNumber(number); 
  childBeen.get(i).get(i1).setNum(number); 
  main.changesum(childBeen); 
  } 
 }); 
 
 //二级组的复选框监听 
 childCb.setOnClickListener(new View.OnClickListener() { 
  @Override 
  public void onClick(View view) { 
  boolean flag=false; 
  boolean cchecked = childCb.isChecked(); 
  childBeen.get(i).get(i1).setChildCb(cchecked); 
  //Toast.makeText(context,"child按钮"+ cchecked+""+i1, Toast.LENGTH_SHORT).show(); 
  // Main2Activity main= (Main2Activity) context; 
  for (List<ChildBean> i1:childBeen){ 
   for(int r=0;r<i1.size();r++) { 
   boolean childCb1 = i1.get(r).isChildCb(); 
   if(!childCb1){ 
    main.allCheckbox.setChecked(false); 
    groupBeen.get(i).setGropuCb(false); 
    flag=true; 
    break; 
   }else{ 
    main.allCheckbox.setChecked(true); 
    groupBeen.get(i).setGropuCb(true); 
   } 
   } 
   if(flag){ 
   break; 
   } 
  } 
 
  int size = childBeen.get(i).size(); 
  for(int x=0;x<size;x++) { 
   boolean childCb1 = childBeen.get(i).get(x).isChildCb(); 
   if(!childCb1){ 
   groupBeen.get(i).setGropuCb(false); 
   break; 
   }else{ 
   groupBeen.get(i).setGropuCb(true); 
   } 
  } 
  notifyDataSetChanged(); 
  main.changesum(childBeen); 
  } 
 }); 
 
 
 return v; 
 } 
 
 @Override 
 public boolean isChildSelectable(int i, int i1) { 
 return false; 
 } 
} 
7.购物车页面逻辑 Main2Activity
package com.bwei.gepeng.view; 
 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.CheckBox; 
import android.widget.ExpandableListView; 
import android.widget.TextView; 
 
import com.bwei.gepeng.R; 
import com.bwei.gepeng.adapter.ExpandableAdapter; 
import com.bwei.gepeng.entity.CartBean; 
import com.bwei.gepeng.entity.ChildBean; 
import com.bwei.gepeng.entity.GroupBean; 
import com.bwei.gepeng.presenter.NewsPresenter; 
 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
 
import butterknife.BindView; 
import butterknife.ButterKnife; 
import butterknife.OnClick; 
 
public class Main2Activity extends AppCompatActivity implements IView { 
 
 @BindView(R.id.exListView) 
 ExpandableListView exListView; 
 @BindView(R.id.all_chekbox) 
 public CheckBox allCheckbox; 
 @BindView(R.id.total_price) 
 TextView totalPrice; 
 @BindView(R.id.total_number) 
 TextView totalnumber; 
 @BindView(R.id.tv_go_to_pay) 
 TextView tvGoToPay; 
 @BindView(R.id.tv_go_to_del) 
 TextView tvGoToDel; 
 
 private ExpandableAdapter expandableAdapter; 
 
 private boolean flagedit = true; 
 private boolean flagdel = false; 
 
 
 private NewsPresenter presenter; 
 
 List<GroupBean> groupBeen = new ArrayList<>(); 
 List<List<ChildBean>> childBeen = new ArrayList<>(); 
 
 int i; 
 int i1; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main2); 
 ButterKnife.bind(this); 
 
 //获取二级列表适配器 
 expandableAdapter = new ExpandableAdapter(Main2Activity.this, groupBeen, childBeen); 
 exListView.setAdapter(expandableAdapter); 
 
 exListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { 
  @Override 
  public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) { 
  return true; 
  } 
 }); 
 
 
 presenter = new NewsPresenter(); 
 presenter.attachView(this); 
 //http://120.27.23.105/product/getCarts?uid=3802&source=android 
 Map<String, String> map = new HashMap<>(); 
 map.put("uid", "3802"); 
 presenter.getData(map, "cart"); 
 
 
 expandableAdapter.setOnDeleteGoods(new ExpandableAdapter.onDeleteGoods() { 
  @Override 
  public void onDelGoods(int i, int i1, String pid) { 
  Main2Activity.this.i = i; 
  Main2Activity.this.i1 = i1; 
 
  Map<String, String> map = new HashMap<>(); 
  map.put("uid", "3802"); 
  map.put("pid", pid); 
  presenter.getData(map, "del"); 
 
  } 
 }); 
 
 } 
 
 
 @Override 
 public void OnSuccess(Object o, String tag) { 
 if (tag.equals("cart")) { 
  if (o != null) { 
  List<CartBean> data = (List<CartBean>) o; 
  for (CartBean i : data) { 
   GroupBean groupBean = new GroupBean(i.getSellerName(), false); 
   this.groupBeen.add(groupBean); 
   List<CartBean.ListBean> list = i.getList(); 
   List<ChildBean> ls = new ArrayList<>(); 
   for (CartBean.ListBean w : list) { 
   String[] split = w.getImages().split("\\|"); 
   ChildBean childBean = new ChildBean(w.getTitle(), split[0], w.getPrice(), 1, false, false, w.getPid()); 
   ls.add(childBean); 
   } 
   this.childBeen.add(ls); 
 
  } 
  for (int i = 0; i < expandableAdapter.getGroupCount(); i++) { 
   exListView.expandGroup(i); 
  } 
  } 
 } else if (tag.equals("del")) { 
  if (o != null) { 
  String msg = (String) o; 
 
  if (this.i != -1 && this.i1 != -1) { 
   int size = childBeen.get(i).size(); 
   if (size == 1) { 
   childBeen.remove(i); 
   groupBeen.remove(i); 
   } else { 
   childBeen.get(i).remove(i1); 
   } 
   
   changesum(childBeen); 
 
   this.i = -1; 
   this.i1 = -1; 
   if(flagdel){ 
   delGoods(); 
   } 
  } 
  } 
 } 
 expandableAdapter.notifyDataSetChanged(); 
 } 
 
 @Override 
 public void OnFailed(Exception e, String tag) { 
  
 } 
 
 @OnClick({R.id.back, R.id.edit, R.id.all_chekbox,R.id.tv_go_to_del}) 
 public void onViewClicked(View view) { 
 switch (view.getId()) { 
  case R.id.back: 
  finish(); 
  break; 
  case R.id.edit: 
  if(flagedit){ 
   tvGoToPay.setVisibility(View.GONE); 
   tvGoToDel.setVisibility(View.VISIBLE); 
  }else{ 
   tvGoToPay.setVisibility(View.VISIBLE); 
   tvGoToDel.setVisibility(View.GONE); 
  } 
 
  for (List<ChildBean> i1 : childBeen) { 
   for (int r = 0; r < i1.size(); r++) { 
   i1.get(r).setBtn(flagedit); 
   } 
  } 
  flagedit = !flagedit; 
  expandableAdapter.notifyDataSetChanged(); 
  break; 
  case R.id.all_chekbox: 
  boolean checked = allCheckbox.isChecked(); 
  //改变一级item复选框 
  for (GroupBean i : groupBeen) { 
   i.setGropuCb(checked); 
  } 
  //改变二级item复选框 
  for (List<ChildBean> i1 : childBeen) { 
   for (int r = 0; r < i1.size(); r++) { 
   i1.get(r).setChildCb(checked); 
   } 
  } 
  expandableAdapter.notifyDataSetChanged(); 
  changesum(childBeen); 
  break; 
  case R.id.tv_go_to_del: 
  if(childBeen.size()!=0){ 
   for (List<ChildBean> i1 : childBeen) { 
   for (int r = 0; r < i1.size(); r++) { 
    boolean childCb1 = i1.get(r).isChildCb(); 
    if (childCb1) { 
    flagdel=true; 
    delGoods(); 
    if(allCheckbox.isChecked()){ 
     allCheckbox.setChecked(false); 
    } 
    break; 
    } 
   } 
   if(flagdel){ 
    break; 
   } 
   } 
  } 
  //Toast.makeText(Main2Activity.this,flagdel+"",Toast.LENGTH_SHORT).show(); 
  break; 
 } 
 } 
 
 //递归删除 
 private void delGoods(){ 
 Boolean flag=false; 
 for(int p=0;p<childBeen.size();p++) { 
  for (int r = 0; r < childBeen.get(p).size(); r++) { 
  boolean childCb1 = childBeen.get(p).get(r).isChildCb(); 
  if(p==childBeen.size()-1&&r==childBeen.get(p).size()-1){ 
   flagdel=false; 
  } 
  if (childCb1) { 
   int pid = childBeen.get(p).get(r).getPid(); 
   this.i = p; 
   this.i1 = r; 
   Map<String, String> map = new HashMap<>(); 
   map.put("uid", "3802"); 
   map.put("pid", pid+""); 
   presenter.getData(map, "del"); 
   flag=!flag; 
   break; 
  } 
  } 
  if(flag){ 
  break; 
  } 
 } 
 } 
 
 //计算和数量总价 
 public void changesum(List<List<ChildBean>> childBeen) { 
 int count = 0; 
 double sum = 0; 
 for (List<ChildBean> i1 : childBeen) { 
  for (int r = 0; r < i1.size(); r++) { 
  boolean childCb1 = i1.get(r).isChildCb(); 
  if (childCb1) { 
   double price = i1.get(r).getPrice(); 
   int num = i1.get(r).getNum(); 
   sum += price * num; 
   count++; 
  } 
  } 
 } 
 totalPrice.setText("¥" + sum); 
 totalnumber.setText("共有商品:" + count + "件"); 
 } 
} 
6.附
shape图 edit
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#FFFFFF" /> <!--<corners android:radius="3dip"/>--> <stroke android:width="1dip" android:color="#BDC7D8" /> </shape>
Application 初始化Fresco
import android.app.Application; 
import com.facebook.drawee.backends.pipeline.Fresco; 
 
public class App extends Application{ 
 @Override 
 public void onCreate() { 
 super.onCreate(); 
 Fresco.initialize(this); 
 } 
} 
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。