自做京东购物车

接口:

public interface Check {
    void checkli(int itemnum);
}
 
  
public interface OnItemClickListener {
    void onItemClick(View view, int position);
}

两个Adapter:
1.shopAda[ter
 
  
package test.bwie.shopcar.Adapter;

import android.content.Context;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;


import java.util.List;
import java.util.Map;

import test.bwie.shopcar.OnItemClickListener;
import test.bwie.shopcar.R;
import test.bwie.shopcar.bean.Check;
import test.bwie.shopcar.bean.ShopCar;


/**
 * Created by 蒋六六 on 2017/10/18.
 */

public class ShopAdapter extends RecyclerView.Adapter {
    private List data;
    private Context content;
    private String uid;
    private Map map;
    public ShopAdapter(Context content, List data, String uid) {
        this.content=content;
        this.data=data;
        this.uid=uid;
    }
    public delect dd;
    public void setdelect(delect dd){
        this.dd=dd;
    }
    public Qcheck qq;
    public void setQcheck(Qcheck qq){
        this.qq=qq;
    }
    @Override
    public CarAdapter onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = View.inflate(content, R.layout.shapcar1_item, null);
        CarAdapter car=new CarAdapter(inflate);
        return car;
    }

    @Override
    public void onBindViewHolder(final CarAdapter holder, int position) {
        String sellerName = data.get(position).sellerName;
        final List lliisstt = data.get(position).list;
      //
        boolean ff=true;
        for (ShopCar.DataBean.ListBean listBean : lliisstt) {
            if (listBean.selected==0){
                ff=false;
            }
        }
        holder.ckk.setChecked(ff);
        //
        holder.tv_shophome.setText(sellerName);
        holder.shop_li_recycle.setLayoutManager(new LinearLayoutManager(content));
        final ShopCarLi caliadapter = new ShopCarLi(content, lliisstt);
        holder.shop_li_recycle.setAdapter(caliadapter);
        //====================================================
        caliadapter.setCheck(new Check() {
            @Override
            public void checkli(final int itemnum) {
                boolean f=true;
                for (ShopCar.DataBean.ListBean listBean : lliisstt) {
                    if(listBean.selected==0){
                        f=false;
                    }
                }
               //商家选框
                holder.ckk.setChecked(f);
                //holder.get商家条目,itemnum商品条目
                qq.one(holder.getLayoutPosition(),itemnum);

        }
        });
        holder.ckk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                for (ShopCar.DataBean.ListBean listBean : lliisstt) {
                    if(holder.ckk.isChecked()){
                        listBean.selected=1;
                    }else {
                        listBean.selected=0;
                    }
                }
                qq.two(holder.getLayoutPosition());
                caliadapter.notifyDataSetChanged();
            }
        });
        caliadapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Adleg(position,dd,holder.getLayoutPosition());
            }
            private void Adleg(final int position, final delect dd, final int layoutPosition) {
                AlertDialog.Builder builder=new AlertDialog.Builder(content);
                builder.setTitle("删除,请三思");
                builder.setMessage("这可是你自己要删除的,想好了啊");
                builder.setPositiveButton("去意已决", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface,final int i) {
                        String pid = lliisstt.get(position).pid;
                        dd.dele(pid,position,layoutPosition);
                    }
                }).create();

                builder.setNegativeButton("我再想想", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(content,"少侠,你很机智",Toast.LENGTH_SHORT).show();
                    }
                }).create();
                builder.show();
            }
        });
       //======================================================
    }
    @Override
    public int getItemCount() {
        return data.size();
    }

    class CarAdapter extends RecyclerView.ViewHolder{

        private TextView tv_shophome;
        private RecyclerView shop_li_recycle;
        private CheckBox ckk;
        public CarAdapter(View itemView) {
            super(itemView);
             tv_shophome = itemView.findViewById(R.id.tv_shophome);
             shop_li_recycle = itemView.findViewById(R.id.shop_li_recy);
             ckk = itemView.findViewById(R.id.ck_shophome);
        }
    }
public interface Qcheck{
    void one(int i, int o);
    void two(int p);
}
public interface delect{
    void dele(String pid, int postion, int p);
}
}
2.ShopCarLi
 
  
package test.bwie.shopcar.Adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;


import com.bumptech.glide.Glide;

import java.util.List;

import test.bwie.shopcar.OnItemClickListener;
import test.bwie.shopcar.R;
import test.bwie.shopcar.bean.Check;
import test.bwie.shopcar.bean.ShopCar;


/**
 * Created by 蒋六六 on 2017/10/18.
 */

public class ShopCarLi extends RecyclerView.Adapter {
    public Context context;
    public List list;
    public Check check;
    public void setCheck(Check check){
        this.check=check;
    }
    public OnItemClickListener onItemClickListener;
    public void setOnItemClickListener(OnItemClickListener onItemClickListener){this.onItemClickListener=onItemClickListener;}
    public ShopCarLi(Context content, List lliisstt) {
        this.context=content;
        this.list=lliisstt;
    }
    @Override
    public Carli onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = View.inflate(context, R.layout.shopcar2_item, null);
        Carli car=new Carli(inflate);
        return car;
    }
    @Override
    public void onBindViewHolder(final Carli holder, final int position) {
        String images = list.get(position).images;
        String[] split = images.split("\\|");

        if(list.get(position).selected==0){
            holder.ck.setChecked(false);
        }else {
            holder.ck.setChecked(true);
        }

        holder.ck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if (b){
                    list.get(position).selected=1;
                }else {
                    list.get(position).selected=0;
                }
                if(check!=null){
                    check.checkli(holder.getLayoutPosition());
                }
            }
        });
        Glide.with(context).load(split[0]).into(holder.img);
        holder.tv.setText(list.get(position).subhead);
        holder.tv1.setText(list.get(position).title);
        holder.tv2.setText("¥"+list.get(position).price);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onItemClickListener.onItemClick(holder.itemView,position);
            }
        });
    }
    @Override
    public int getItemCount() {
        return list.size();
    }
    class Carli extends RecyclerView.ViewHolder{
        public ImageView img;
        public TextView tv;
        public TextView tv1;
        public TextView tv2;

        public CheckBox ck;
        public Carli(View itemView) {
            super(itemView);
            img = itemView.findViewById(R.id.imageView12);
            tv=itemView.findViewById(R.id.tv_jianjie);
            tv1=itemView.findViewById(R.id.tv_jianjie2);
            tv2=itemView.findViewById(R.id.tv_shop_price);
            ck=itemView.findViewById(R.id.ck_gt);
        }
    }
}
/////////Main
 
  
package test.bwie.shopcar;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;

import java.io.IOException;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
import test.bwie.shopcar.Adapter.ShopAdapter;
import test.bwie.shopcar.bean.ShopCar;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private int sumNum;
    private Double sumPrice = 0.0;
    private DecimalFormat decimalFormat;
    private RecyclerView car_recy;
    private CheckBox mCheckboxQuanxuan;
    private TextView tv_sum;
    private TextView mJiesuanButton;
    private String url="http://120.27.23.105/product/getCarts?uid=185";
    private List data;
    private ShopAdapter shopadapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        okhttp();
        decimalFormat = new DecimalFormat("#0.00");
    }
    private void okhttp() {
        NetRequestUtils.ok(url, new Callback() {
            private ShopCar shopCar;
            @Override
            public void onFailure(Call call, IOException e) {
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String    string = response.body().string();
                Gson gson=new Gson();
                ShopCar shopCar = gson.fromJson(string, ShopCar.class);
                data = shopCar.data;
                if (data!=null){
                    for (ShopCar.DataBean dataBean : data) {
                        for (ShopCar.DataBean.ListBean listBean : dataBean.list) {
                            if (listBean.selected==1){
                                sumNum++;
                                sumPrice = sumPrice + Double.parseDouble(listBean.price);
                            }}}
                    //==========分割线
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            tv_sum.setText("合计:¥"+decimalFormat.format(sumPrice));
                            mJiesuanButton.setText("去结算("+sumNum+")");
                            shopadapter = new ShopAdapter(MainActivity.this, data, "185");
                            car_recy.setAdapter(shopadapter);
                            delect();
                            shopadapter.setQcheck(new ShopAdapter.Qcheck() {
                                @Override
                                public void one(int i, int o) {
                                    // TODO: 2017/10/21 商品选中状态改变计算价格
                                    String p = data.get(i).list.get(o).price;
                                    if (data.get(i).list.get(o).selected == 1){
                                        sumPrice = sumPrice + Double.parseDouble(p);
                                        sumNum++;
                                    } else {
                                        sumPrice = sumPrice - Double.parseDouble(p);
                                        sumNum--;
                                    }

                                    tv_sum.setText("合计:¥"+decimalFormat.format(sumPrice));
                                    mJiesuanButton.setText("去结算("+sumNum+")");
                                    //-------------------华丽的分割线---------------
                                    boolean f = true;
                                    for (ShopCar.DataBean dataBean : data) {
                                        for (ShopCar.DataBean.ListBean listBean : dataBean.list) {
                                            if (listBean.selected == 0) {
                                                f = false;
                                            }
                                        }
                                    }
                                    mCheckboxQuanxuan.setChecked(f);
                                }

                                @Override
                                public void two(int p) {
                                    boolean f = true;
                                    for (ShopCar.DataBean dataBean : data) {
                                        for (ShopCar.DataBean.ListBean listBean : dataBean.list) {
                                            if (listBean.selected == 0) {
                                                f = false;
                                            }
                                        }
                                    }
                                    mCheckboxQuanxuan.setChecked(f);
                                }
                            });

                        }
                    });
                }
            }
        });
    }

    private void delect() {
        shopadapter.setdelect(new ShopAdapter.delect() {
            @Override
            public void dele(String pid, final int postion, final int lapotion) {
                Map map = new HashMap();
                map.put("pid", pid);
                map.put("uid", "185");
                NetRequestUtils.chuan(map, "http://120.27.23.105/product/deleteCart", new NetRequestUtils.OkhttpIn() {
                    @Override
                    public void onresponse(String string) {
                       runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                data.get(lapotion).list.remove(postion);
                                for (int i = 0; i < data.size(); i++) {
                                    if (data.get(i).list.size() == 0) {
                                        data.remove(i);
                                    }
                                }
                                shopadapter.notifyDataSetChanged();
                            }});}});}});
    }


    private void initView() {
        car_recy = (RecyclerView) findViewById(R.id.shopcar_recycle);
        car_recy.setLayoutManager(new LinearLayoutManager(MainActivity.this));
        mCheckboxQuanxuan = (CheckBox) findViewById(R.id.checkbox_quanxuan);
        mCheckboxQuanxuan.setOnClickListener(this);
        tv_sum = (TextView) findViewById(R.id.tv_sum);
        mJiesuanButton = (TextView) findViewById(R.id.jiesuan_button);
        mJiesuanButton.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.shopcar_recycle:
                break;
            case R.id.checkbox_quanxuan:
                QXcheck();
                break;
            case R.id.jiesuan_button:
                int num=1;
                if(num>0){
                    Toast.makeText(MainActivity.this,decimalFormat.format(sumPrice),Toast.LENGTH_SHORT).show();
                }
                break;
        }
    }

    private void QXcheck() {
        for (ShopCar.DataBean dataBean : data) {
            for (ShopCar.DataBean.ListBean listBean : dataBean.list) {
                if(mCheckboxQuanxuan.isChecked()){
                    if (listBean.selected == 0) {
                        //// TODO: 2017/10/21 点击全部选中时,先加上之前未选中的价钱 然后改变状态
                        sumNum++;
                        sumPrice = sumPrice + Double.parseDouble(listBean.price);
                        listBean.selected=1;
                    }
                }else {
                    if (listBean.selected == 1) {
                        //// TODO: 2017/10/21 点击全部取消选中时,先减去之前选中的价钱 然后改变状态
                        sumNum--;
                        sumPrice = sumPrice - Double.parseDouble(listBean.price);
                        listBean.selected = 0;
                    }
                }
            }
        }


        tv_sum.setText("合计:¥"+decimalFormat.format(sumPrice));
        mJiesuanButton.setText("去结算("+sumNum+")");
        shopadapter.notifyDataSetChanged();
    }
}
下面贴出布局
main.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="match_parent"
    android:orientation="vertical"
    android:weightSum="1">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="40dp">
        <TextView
            android:layout_centerInParent="true"
            android:text="购物车"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    RelativeLayout>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/shopcar_recycle"
        android:layout_width="match_parent"
        android:layout_height="430dp">
    android.support.v7.widget.RecyclerView>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        
        <CheckBox
            android:id="@+id/checkbox_quanxuan"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="全选"/>
        
        <TextView
            android:id="@+id/tv_sum"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="right"
            android:paddingRight="10dp"
            android:textColor="#F63A19"
            android:text="合计:¥0.00"/>
        
        <TextView
            android:background="#F63A19"
            android:id="@+id/jiesuan_button"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:gravity="center"
            android:padding="10dp"
            android:text="去结算"/>
    LinearLayout>
LinearLayout>

shopcar1.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="match_parent"
    android:orientation="vertical"
    >
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <CheckBox
        android:id="@+id/ck_shophome"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/tv_shophome"
        android:text="商家"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/shop_li_recy"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    android.support.v7.widget.RecyclerView>
LinearLayout>

3.shopcarli.xml
 
  
xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="#ffffff"
    android:layout_height="match_parent">
    <CheckBox

        android:layout_gravity="center"
        android:id="@+id/ck_gt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/imageView12"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:layout_gravity="center"
        android:src="@mipmap/ic_launcher" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_jianjie"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="克拉裸钻定制DIA双证书18K金钻石戒指女款克拉钻戒"
            android:textSize="13sp" />

        <TextView
            android:id="@+id/tv_jianjie2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="啦啦啦啦啦啦啦啦"
            android:textSize="10dp" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/tv_shop_price"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="¥4500000.00"
                android:textColor="#ff0000" />
        RelativeLayout>

    LinearLayout>
LinearLayout>

 
  
 
  
 
  
 
  

你可能感兴趣的:(自做京东购物车)