查询购物车和删除购物的接口
public final String gx="https://www.zhaoapi.cn/product/updateCarts";
public final String sc="https://www.zhaoapi.cn/product/deleteCart";
主布局
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
import com.example.ykmn.gwc.gwc_Bean;
import com.example.ykmn.gwc.gwc_Pc;
import com.example.ykmn.gwc.gwc_Vi;
import com.example.ykmn.gwc.slpriceBean;
import java.util.List;
public class Main3Activity extends AppCompatActivity implements gwc_Vi {
private CheckBox qx;
private myGwc my;
private TextView zj;
private Button js;
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what==0){
slpriceBean slpriceBean = (com.example.ykmn.gwc.slpriceBean) msg.obj;
zj.setText("人民币¥"+slpriceBean.getPrice());
js.setText("去结算"+slpriceBean.getCount());
}
}
};
private gwc_Pc gwc_pc;
private Gwc_Myadapter myadapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
qx = findViewById(R.id.qx);
my = findViewById(R.id.my);
zj = findViewById(R.id.zj);
js = findViewById(R.id.js);
gwc_pc = new gwc_Pc(this);
gwc_pc.gwcinfo();
}
@Override
public void Onsuccess(final gwc_Bean gwc_bean) {
qx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.qx:
if(myadapter!=null){
myadapter.quanxuan(qx.isChecked());
}
break;
}
}
});
runOnUiThread(new Runnable() {
@Override
public void run() {
if(gwc_bean!=null){
Log.d("zzz", "run: "+gwc_bean.toString());
for (int i=0;i<gwc_bean.getData().size();i++){
if(isChildInGroupChecked(i,gwc_bean)){
gwc_bean.getData().get(i).setGroupcheck(true);
}
}
qx.setChecked(isAllGroupChecked(gwc_bean));
myadapter = new Gwc_Myadapter(gwc_bean,Main3Activity.this,gwc_pc,handler);
my.setAdapter(myadapter);
for (int i=0;i<gwc_bean.getData().size();i++){
my.expandGroup(i);
}
myadapter.zongjia();
}else{
Toast.makeText(Main3Activity.this, "购物车空", Toast.LENGTH_SHORT).show();
}
}
});
}
private boolean isAllGroupChecked(gwc_Bean gwc_bean){
for (int i=0;i<gwc_bean.getData().size();i++){
if(!gwc_bean.getData().get(i).isGroupcheck()){
return false;
}
}
return true;
}
private boolean isChildInGroupChecked(int i,gwc_Bean gwc_bean){
List<gwc_Bean.DataBean.ListBean> list = gwc_bean.getData().get(i).getList();
for (int j=0;j<list.size();j++){
if(list.get(j).getSelected()==0){
return false;
}
}
return true;
}
@Override
protected void onResume() {
super.onResume();
gwc_pc.gwcinfo();
}
}
适配器
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.example.ykmn.gwc.gwc_Bean;
import com.example.ykmn.gwc.gwc_Pc;
import com.example.ykmn.gwc.slpriceBean;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
/**
* author:Created by MingShao on 2018/1/16.
*/
public class Gwc_Myadapter extends BaseExpandableListAdapter{
gwc_Bean gwc_bean;
Context context;
int childIndex;
gwc_Pc gwc_pc;
Handler handler;
int allIndex;
public Gwc_Myadapter(gwc_Bean gwc_bean, Context context, gwc_Pc gwc_pc, Handler handler) {
this.gwc_bean = gwc_bean;
this.context = context;
this.gwc_pc = gwc_pc;
this.handler = handler;
}
@Override
public int getGroupCount() {
return gwc_bean.getData().size();
}
@Override
public int getChildrenCount(int i) {
return gwc_bean.getData().get(i).getList().size();
}
@Override
public Object getGroup(int i) {
return gwc_bean.getData().get(i);
}
@Override
public Object getChild(int i, int i1) {
return gwc_bean.getData().get(i).getList().get(i1);
}
@Override
public long getGroupId(int i) {
return i;
}
@Override
public long getChildId(int i, int i1) {
return i1;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) {
final faViewholder fv;
if(view==null){
view=View.inflate(context,R.layout.father,null);
fv=new faViewholder();
fv.fa_cb=view.findViewById(R.id.fa_cb);
fv.fa_text=view.findViewById(R.id.fa_text);
view.setTag(fv);
}else{
fv= (faViewholder) view.getTag();
}
final gwc_Bean.DataBean dataBean = gwc_bean.getData().get(i);
fv.fa_text.setText(dataBean.getSellerName());
fv.fa_cb.setChecked(dataBean.isGroupcheck());
fv.fa_cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
childIndex=0;
qxchild(dataBean,fv.fa_cb.isChecked());
}
});
return view;
}
private void qxchild(final gwc_Bean.DataBean dataBean, final boolean checked) {
gwc_Bean.DataBean.ListBean listBean = dataBean.getList().get(childIndex);
Log.d("zzzz", "qxchild: "+listBean.toString());
Map<String,String> map=new HashMap<>();
map.put("uid","4885");
map.put("sellerid", String.valueOf(listBean.getSellerid()));
map.put("pid", String.valueOf(listBean.getPid()));
map.put("selected", String.valueOf(checked?1:0));
map.put("num", String.valueOf(listBean.getNum()));
OkHttp3Util.doPost(Wz.gx, map, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
childIndex++;
if(childIndex<dataBean.getList().size()){
qxchild(dataBean,checked);
}else{
gwc_pc.gwcinfo();
}
}
}
});
}
@Override
public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
childViewHolder cv;
if(view==null){
view=View.inflate(context,R.layout.child,null);
cv=new childViewHolder();
cv.child_cb=view.findViewById(R.id.child_cb);
cv.child_img=view.findViewById(R.id.child_img);
cv.child_jia=view.findViewById(R.id.child_jia);
cv.child_jian=view.findViewById(R.id.child_jian);
cv.child_sc=view.findViewById(R.id.child_sc);
cv.child_sl=view.findViewById(R.id.child_sl);
cv.child_title=view.findViewById(R.id.child_title);
cv.child_price=view.findViewById(R.id.child_price);
view.setTag(cv);
}else{
cv= (childViewHolder) view.getTag();
}
final gwc_Bean.DataBean.ListBean listBean = gwc_bean.getData().get(i).getList().get(i1);
cv.child_title.setText(listBean.getTitle());
cv.child_price.setText(listBean.getPrice()+"");
String[] split = listBean.getImages().split("\\|");
Glide.with(context).load(split[0]).into(cv.child_img);
cv.child_sl.setText(listBean.getNum()+"");
cv.child_cb.setChecked(listBean.getSelected()==0?false:true);
cv.child_cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Map<String,String> map=new HashMap<>();
map.put("uid","4885");
map.put("sellerid", String.valueOf(listBean.getSellerid()));
map.put("num", String.valueOf(listBean.getNum()));
map.put("selected", String.valueOf(listBean.getSelected()==0?1:0));
map.put("pid", String.valueOf(listBean.getPid()));
OkHttp3Util.doPost(Wz.gx, map, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
gwc_pc.gwcinfo();
}
}
});
}
});
cv.child_jia.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Map<String,String> map=new HashMap<>();
map.put("uid","4885");
map.put("sellerid", String.valueOf(listBean.getSellerid()));
map.put("pid", String.valueOf(listBean.getPid()));
map.put("selected", String.valueOf(listBean.getSelected()));
map.put("num", String.valueOf(listBean.getNum()+1));
OkHttp3Util.doPost(Wz.gx, map, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
gwc_pc.gwcinfo();
}
}
});
}
});
cv.child_jian.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Map<String,String> map=new HashMap<>();
map.put("uid","4885");
map.put("sellerid", String.valueOf(listBean.getSellerid()));
map.put("pid", String.valueOf(listBean.getPid()));
map.put("num", String.valueOf(listBean.getNum()-1));
map.put("sellected", String.valueOf(listBean.getSelected()==0?1:0));
OkHttp3Util.doPost(Wz.gx, map, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
gwc_pc.gwcinfo();
}
}
});
}
});
cv.child_sc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Map<String,String> map=new HashMap<>();
map.put("uid","4885");
map.put("pid", String.valueOf(listBean.getPid()));
OkHttp3Util.doPost(Wz.sc, map, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
gwc_pc.gwcinfo();
}
}
});
}
});
return view;
}
@Override
public boolean isChildSelectable(int i, int i1) {
return true;
}
//计算总价
public void zongjia(){
double price=0;
int count=0;
for (int i=0;i<gwc_bean.getData().size();i++){
List<gwc_Bean.DataBean.ListBean> list = gwc_bean.getData().get(i).getList();
for(int j=0;j<list.size();j++){
if(list.get(j).getSelected()==1){
price+=list.get(j).getPrice()*list.get(j).getNum();
count+=list.get(j).getNum();
}
}
}
DecimalFormat decimalFormat=new DecimalFormat("0.00");
String format = decimalFormat.format(price);
slpriceBean slpriceBean=new slpriceBean(format,count);
Message msg = Message.obtain();
msg.what=0;
msg.obj=slpriceBean;
handler.sendMessage(msg);
}
public void quanxuan(boolean checked){
List<gwc_Bean.DataBean.ListBean> list = new ArrayList<>();
for (int i=0;i<gwc_bean.getData().size();i++){
List<gwc_Bean.DataBean.ListBean> list1 = gwc_bean.getData().get(i).getList();
for(int j=0;j<list1.size();j++){
list.add(list1.get(j));
}
}
allIndex=0;
gxallChecked(list,checked);
}
private void gxallChecked(final List<gwc_Bean.DataBean.ListBean> list, final boolean checked) {
gwc_Bean.DataBean.ListBean listBean = list.get(allIndex);
Map<String,String> map=new HashMap<>();
map.put("uid","4885");
map.put("sellerid", String.valueOf(listBean.getSellerid()));
map.put("pid", String.valueOf(listBean.getPid()));
map.put("num", String.valueOf(listBean.getNum()));
map.put("selected", String.valueOf(checked?1:0));
OkHttp3Util.doPost(Wz.gx, map, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
allIndex++;
if(allIndex<list.size()){
gxallChecked(list,checked);
}else{
gwc_pc.gwcinfo();
}
}
}
});
}
class faViewholder{
CheckBox fa_cb;
TextView fa_text;
}
class childViewHolder{
CheckBox child_cb;
ImageView child_img;
TextView child_title;
TextView child_jian;
TextView child_jia;
TextView child_sl;
Button child_sc;
TextView child_price;
}
}
Glide适配图片
import android.content.Context;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.youth.banner.loader.ImageLoader;
/**
* author:Created by MingShao on 2018/1/16.
*/
class GlideImageLoader extends ImageLoader {
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
Glide.with(context).load(path).into(imageView);
}
}
自定义二级列表
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ExpandableListView;
/**
* author:Created by MingShao on 2018/1/16.
*/
public class myGwc extends ExpandableListView{
public myGwc(Context context) {
super(context);
}
public myGwc(Context context, AttributeSet attrs) {
super(context, attrs);
}
public myGwc(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public myGwc(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
}
P层
public class gwc_Pc implements gwc_Pi{
gwc_Vi gwc_vi;
gwc_Mc gwc_mc;
public gwc_Pc(gwc_Vi gwc_vi) {
this.gwc_vi = gwc_vi;
gwc_mc=new gwc_Mc();
}
public void gwcinfo(){
gwc_mc.gwcinfo(this);
}
@Override
public void Onsuccess(gwc_Bean gwc_bean) {
gwc_vi.Onsuccess(gwc_bean);
}
}
p层接口
public interface gwc_Pi {
void Onsuccess(gwc_Bean gwc_bean);
}
V层接口
public interface gwc_Vi {
void Onsuccess(gwc_Bean gwc_bean);
}
M层
import com.example.ykmn.OkHttp3Util;
import com.example.ykmn.Wz;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
/**
* author:Created by MingShao on 2018/1/16.
*/
public class gwc_Mc {
public void gwcinfo(final gwc_Pi gwc_pi){
Map<String,String> map = new HashMap<>();
map.put("uid","4885");
OkHttp3Util.doPost(Wz.cx, map, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
String string = response.body().string();
gwc_Bean gwc_bean = new Gson().fromJson(string, gwc_Bean.class);
gwc_pi.Onsuccess(gwc_bean);
}
}
});
}
}
bean类
import java.util.List;
/**
* author:Created by MingShao on 2018/1/16.
*/
public class gwc_Bean {
@Override
public String toString() {
return "gwc_Bean{" +
"msg='" + msg + '\'' +
", code='" + code + '\'' +
", data=" + data +
'}';
}
private String msg;
private String code;
private List<DataBean> data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
private String sellerName;
private String sellerid;
private boolean groupcheck;
@Override
public String toString() {
return "DataBean{" +
"sellerName='" + sellerName + '\'' +
", sellerid='" + sellerid + '\'' +
", groupcheck=" + groupcheck +
", list=" + list +
'}';
}
public boolean isGroupcheck() {
return groupcheck;
}
public void setGroupcheck(boolean groupcheck) {
this.groupcheck = groupcheck;
}
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 {
/**
* bargainPrice : 11800.0
* createtime : 2017-10-10T17:33:37
* detailUrl : https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends
* images : https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg
* num : 2
* pid : 57
* price : 5199.0
* pscid : 40
* selected : 0
* sellerid : 1
* subhead : 【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统
* title : 小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银
*/
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;
}
}
}
}
slpriceBean类
public class slpriceBean {
String price;
int count;
public slpriceBean(String price, int count) {
this.price = price;
this.count = count;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
主布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.ykmn.Main3Activity">
<com.example.ykmn.myGwc
android:id="@+id/my"
android:layout_width="match_parent"
android:layout_above="@+id/ll"
android:layout_height="match_parent">
</com.example.ykmn.myGwc>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ll"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/qx"
android:layout_weight="2"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/zj"
android:textColor="#f00"
android:text="总价"
android:layout_weight="4"
/>
<Button
android:id="@+id/js"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#f00"
android:text="去结算"
android:layout_weight="2"
android:gravity="center"
android:textColor="#fff" />
</LinearLayout>
</RelativeLayout>
一级布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fa_cb"
/>
<TextView
android:id="@+id/fa_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/fa_cb"
android:layout_alignBottom="@+id/fa_cb"
android:layout_centerHorizontal="true"
android:text="商家" />
</RelativeLayout>
二级布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:id="@+id/child_cb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/child_img"
android:layout_alignParentStart="true"
android:layout_marginBottom="19dp" />
<ImageView
android:id="@+id/child_img"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_alignParentTop="true"
android:layout_marginTop="11dp"
android:layout_toEndOf="@+id/child_cb"
app:srcCompat="@mipmap/ic_launcher" />
<TextView
android:id="@+id/child_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/child_cb"
android:layout_marginStart="16dp"
android:layout_toEndOf="@+id/child_img"
android:text="TextView" />
<Button
android:id="@+id/child_sc"
android:layout_width="60dp"
android:layout_height="100dp"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:text="删除" />
<TextView
android:id="@+id/child_jian"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/child_img"
android:layout_toEndOf="@+id/child_price"
android:background="#f00"
android:text="—" />
<TextView
android:id="@+id/child_sl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/child_jian"
android:layout_alignBottom="@+id/child_jian"
android:layout_toStartOf="@+id/child_jia"
android:layout_marginRight="30dp"
android:text="1" />
<TextView
android:id="@+id/child_jia"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/child_jian"
android:layout_alignBottom="@+id/child_jian"
android:layout_marginEnd="23dp"
android:layout_toStartOf="@+id/child_sc"
android:background="#f00"
android:text="十" />
<TextView
android:id="@+id/child_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/child_jian"
android:layout_alignBottom="@+id/child_jian"
android:layout_toEndOf="@+id/child_img"
android:text="价格" />
</RelativeLayout>