购物车 页面

-------------------------购物车页面布局文件-----------------------------

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="#ff00f0"
    android:orientation="vertical"
    android:layout_width="match_parent" android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:gravity="center"
        android:text="购物车"
        android:textColor="#BB1F35"
        android:textSize="18sp" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#F444" />

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

        <android.support.v7.widget.RecyclerView
            android:id="@+id/shopping_cart_data"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"></android.support.v7.widget.RecyclerView>

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#F444" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:background="#FFFF">
            <CheckBox
                android:id="@+id/all_cbx"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginLeft="8dp"
                android:drawablePadding="6dp"
                android:text="全选"
                android:textColor="#7F7F7F"
                android:textSize="14sp" />
            <!--android:visibility="gone"-->

            <TextView
                android:id="@+id/all_money_tv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginLeft="8dp"
                android:layout_toRightOf="@id/all_cbx"
                android:text="总额: ¥ 0"
                android:textColor="#F33F3F"
                android:textSize="20sp" />

            <TextView
                android:id="@+id/settle_tv"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentRight="true"
                android:background="#CC0000"
                android:clickable="true"
                android:gravity="center"
                android:paddingLeft="15dp"
                android:paddingRight="15dp"
                android:text="去结算(0)"
                android:textColor="@android:color/white"
                android:textSize="18sp" />
        </RelativeLayout>
    </LinearLayout>
</LinearLayout>

----------------------------------购物车Fragment-----------------------------------------------------

 /**
     * 计算总金额
     * @param lists
     */
    private void jiSuanPrice(List<GsonCarData.DataBean> lists) {
        totalPrice = 0;//在调用方法之前先将总价变成方防止累加

        for (int i = 0; i < lists.size(); i++) {
            //的到商店中的商品的集合
            List<GsonCarData.DataBean.ListBean> shoppingList = lists.get(i).getList();
            Observable.from(shoppingList)
                    .filter(new Func1<GsonCarData.DataBean.ListBean, Boolean>() {
                        @Override
                        public Boolean call(GsonCarData.DataBean.ListBean listBean) {
                            return listBean.getSelected() == 1;
                        }
                    }).subscribe(new Action1<GsonCarData.DataBean.ListBean>() {
                @Override
                public void call(GsonCarData.DataBean.ListBean listBean) {
                    //得到单价
                    float price = listBean.getPrice();
                    //得到数量
                    int num = listBean.getNum();
                    //numList.add((int) (price*num));

                    totalPrice += (int) (price*num);
                    Log.d("pppp", "call: "+price+"数量:"+num);
                }
            });

        }

        //商品总价
        mAllMoneyTv.setText(totalPrice+"");

    }

package com.example.day0629_moni_yk.view.fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;

import com.example.day0629_moni_yk.R;
import com.example.day0629_moni_yk.adapter.ShoppingCartAdapter;
import com.example.day0629_moni_yk.bean.Constant;
import com.example.day0629_moni_yk.bean.GsonShoppingCartData;
import com.example.day0629_moni_yk.util.RequestDataUtil;
import com.google.gson.Gson;

import java.util.List;

/**
 * Created by John on 2018/6/29 0029.
 */

public class FragmentShoppingCart extends Fragment implements View.OnClickListener {
    private View view;
    private RecyclerView mShoppingCartData;
    /**
     * 全选
     */
    private CheckBox mAllCbx;
    /**
     * 总额: ¥ 0
     */
    private TextView mAllMoneyTv;
    /**
     * 去结算(0)
     */
    private TextView mSettleTv;
    private RequestDataUtil requestDataUtil;
    private List<GsonShoppingCartData.DataBean> shoppingList;
    private String myUpdateCars;
    private List<GsonShoppingCartData.DataBean.ListBean> list;
    private boolean bian = false;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_shoppingcart, container, false);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initView(view);
        //请求网络数据
        requestDataFunction();
    }

    private void requestDataFunction() {//请求数据
        //拼接接口数据
        String myUrl = Constant.ShoppingCartUrl + "?uid=15909";
        Log.d("ppp", "onRequest: "+myUrl);
        requestDataUtil.getRequestJsonData(myUrl, new RequestDataUtil.IcallBack() {
            @Override
            public void onRequest(String jsonData) {
                //请求数据成功 解析数据
                Gson gson = new Gson();
                GsonShoppingCartData data = gson.fromJson(jsonData, GsonShoppingCartData.class);
                shoppingList = data.getData();
                //设置布局管理器
                mShoppingCartData.setLayoutManager(new LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL,false));
                //设置适配器
                final ShoppingCartAdapter adapter = new ShoppingCartAdapter(getContext(), shoppingList);
                mShoppingCartData.setAdapter(adapter);
                getPrice();//计算总价

                //接口回调
                adapter.setPrantDataState(new ShoppingCartAdapter.PSCIcallBack() {
                    @Override
                    public void getPrantDataState(int sellerid, int pid, int selected, int nums) {//这个是加减数据与子复选框
                        //请求更新购物车的接口
                        //拼接地址https://www.zhaoapi.cn/product/updateCarts?uid=71&sellerid=1&pid=1&selected=0&num=10
                        String myUpdateCar = Constant.UpdataShoppingCartUrl+"?uid=15909"+"&sellerid="+sellerid+"&pid="+pid+"&selected="+selected+"&num="+nums;
                        requestDataUtil.getRequestJsonData(myUpdateCar, new RequestDataUtil.IcallBack() {
                            @Override
                            public void onRequest(String jsonData) {
                                getPrice();//计算总价
                                requestDataFunction();
                            }
                        });
                    }

                    @Override
                    public void getShangJiaChecked(int position, String sellerid,boolean b) {//这个是父复选框的接口回调
                        for (int i = 0; i < shoppingList.size(); i++) {
                            if(position == i){
                                //根据传过来的下标 得到你点击下面的商品集合
                                list = shoppingList.get(position).getList();
                            }

                        }
                        for (int j = 0; j <list.size() ; j++) {
                            if(b==true){
                                myUpdateCars = Constant.UpdataShoppingCartUrl+"" +
                                        "?uid=15909"+"&sellerid="+list.get(j).getSellerid()+"&pid="+list.get(j).getPid()+"&selected="+1+"&num="+list.get(j).getNum();
                            }else if(b==false){
                                myUpdateCars = Constant.UpdataShoppingCartUrl+"" +
                                        "?uid=15909"+"&sellerid="+list.get(j).getSellerid()+"&pid="+list.get(j).getPid()+"&selected="+0+"&num="+list.get(j).getNum();
                            }

                            Log.d("iiiii", "getShangJiaChecked: "+myUpdateCars);
                            requestDataUtil.getRequestJsonData(myUpdateCars, new RequestDataUtil.IcallBack() {
                                @Override
                                public void onRequest(String jsonData) {
                                    getPrice();//计算总价
                                    requestDataFunction();
                                    bian = true;
                                    Log.d("iiiii", "getShangJiaChecked: "+bian);
                                }
                            });
                        }

                        /*if(bian == true){
                            requestDataFunction();
                        }*/
                        /*requestDataUtil.getRequestJsonData(myUpdateCars, new RequestDataUtil.IcallBack() {
                            @Override
                            public void onRequest(String jsonData) {
                                getPrice();//计算总价
                                requestDataFunction();
                            }
                        });*/

                    }

                });
            }
        });

    }

    /**
     * 计算价格
     */
    private void getPrice() {
        int allprice = 0;
        for (int i = 0; i < shoppingList.size(); i++) {
            for (int j = 0; j < shoppingList.get(i).getList().size(); j++) {
                if(shoppingList.get(i).getList().get(j).getSelected() == 1){
                    int price = (int)shoppingList.get(i).getList().get(j).getPrice();
                    int n = shoppingList.get(i).getList().get(j).getNum();
                    Log.d("ttt",n+"      n    ");
                    allprice += price * n;
                }
            }
        }
        mAllMoneyTv.setText("¥"+allprice+".00");
    }

    /**
     * 初始化
     * @param view
     */
    private void initView(View view) {
        mShoppingCartData = (RecyclerView) view.findViewById(R.id.shopping_cart_data);
        mAllCbx = (CheckBox) view.findViewById(R.id.all_cbx);
        mAllMoneyTv = (TextView) view.findViewById(R.id.all_money_tv);
        mSettleTv = (TextView) view.findViewById(R.id.settle_tv);
        mSettleTv.setOnClickListener(this);

        //得到网络请求工具类
        requestDataUtil = RequestDataUtil.getInstance();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.settle_tv://结算总价
                Toast.makeText(getContext(), "开始结算总价", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

-----------------------------------------购物车适配器----------------------------------------

package com.example.day0629_moni_yk.adapter;

import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;

import com.example.day0629_moni_yk.R;
import com.example.day0629_moni_yk.bean.GsonShoppingCartData;

import java.util.List;

/**
 * Created by John on 2018/6/29 0029.
 */

public class ShoppingCartAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context context;
    private List<GsonShoppingCartData.DataBean> shoppingList;
    private int i = 0;

    public ShoppingCartAdapter(Context context, List<GsonShoppingCartData.DataBean> shoppingList) {
        this.context = context;
        this.shoppingList = shoppingList;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.shoppingcart_layout, parent, false);
        ViewHolderShopping holderShopping = new ViewHolderShopping(view);
        return holderShopping;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
        ViewHolderShopping holderShopping = (ViewHolderShopping) holder;
        //绑定数据
        holderShopping.mShopName.setText(shoppingList.get(position).getSellerName());
        //得到集合 设置适配器
        List<GsonShoppingCartData.DataBean.ListBean> list = shoppingList.get(position).getList();
        //设置布局管理器
        holderShopping.mShopRecycle.setLayoutManager(new LinearLayoutManager(context,LinearLayoutManager.VERTICAL,false));
        ShoppingCartChildrenAdapter adapter = new ShoppingCartChildrenAdapter(context,list);
        holderShopping.mShopRecycle.setAdapter(adapter);

        //接口回调
        adapter.setDataState(new ShoppingCartChildrenAdapter.SCIcallBack() {
            @Override
            public void getDataState(int sellerid, int pid, int selected, int nums) {
                if(pscIcallBack!=null){
                    pscIcallBack.getPrantDataState(sellerid,pid,selected,nums);
                }
            }
        });

        //实现全选
            List<GsonShoppingCartData.DataBean.ListBean> listBeans = shoppingList.get(position).getList();
            for (int j = 0; j < listBeans.size() ; j++) {
                if(listBeans.size() == 1 && listBeans.get(j).getSelected() == 1){
                    holderShopping.mShopCheckBox.setChecked(true);
                    //不用刷新适配器 因为你在点击子的复选框时之前就写过重新请求数据的功能
                }else {
                    holderShopping.mShopCheckBox.setChecked(false);
                }
                if(listBeans.size() > 1){
                    if(listBeans.get(j).getSelected() == 1){
                        i++;//设置一个变量用于存储为选中状态的条目有多少 判断他如果与长度一样的话就将商家设置为选中状态
                    }
                    Log.d("changdu", "onBindViewHolder: i="+ i +"size="+listBeans.size());
                    if(i == listBeans.size()){
                        holderShopping.mShopCheckBox.setChecked(true);
                    }else {
                        holderShopping.mShopCheckBox.setChecked(false);
                    }

                }
            }
        //的到复选框是否为选中状态
        holderShopping.mShopCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if(pscIcallBack!=null){
                    String sellerid = shoppingList.get(position).getSellerid();
                    pscIcallBack.getShangJiaChecked(position,sellerid,b);
                }
            }
        });
    }



    @Override
    public int getItemCount() {
        return shoppingList.size();
    }

    static class ViewHolderShopping extends RecyclerView.ViewHolder{
        View view;
        CheckBox mShopCheckBox;
        TextView mShopName;
        RecyclerView mShopRecycle;

        ViewHolderShopping(View view) {
            super(view);
            this.view = view;
            this.mShopCheckBox = (CheckBox) view.findViewById(R.id.shop_checkBox);
            this.mShopName = (TextView) view.findViewById(R.id.shop_name);
            this.mShopRecycle = (RecyclerView) view.findViewById(R.id.shop_recycle);
        }
    }

    //1.定义接口
    public interface PSCIcallBack{
        void getPrantDataState(int sellerid,int pid,int selected,int nums);//得到商品此时的状态值。。。。 参数还没写
        void getShangJiaChecked(int position,String sellerid,boolean b);//商家是否选中
    }
    //2.声明接口对象
    private PSCIcallBack pscIcallBack;
    //3.提供外部调用的方法
    public void setPrantDataState(PSCIcallBack pscIcallBack){
        this.pscIcallBack = pscIcallBack;
    }
}

--------------------------------购物车子适配器-----------------------------------

package com.example.day0629_moni_yk.adapter;

import android.content.Context;
import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;

import com.example.day0629_moni_yk.R;
import com.example.day0629_moni_yk.bean.GsonShoppingCartData;
import com.example.day0629_moni_yk.view.CombinationView;
import com.facebook.drawee.view.SimpleDraweeView;

import java.util.List;

/**
 * Created by John on 2018/6/29 0029.
 */

public class ShoppingCartChildrenAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context context;
    private List<GsonShoppingCartData.DataBean.ListBean> list;

    public ShoppingCartChildrenAdapter(Context context, List<GsonShoppingCartData.DataBean.ListBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.shoppingcartchildren_layout, parent, false);
        ViewHolderShoppingChildren holderShoppingChildren = new ViewHolderShoppingChildren(view);
        return holderShoppingChildren;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
        final ViewHolderShoppingChildren holderShoppingChildren = (ViewHolderShoppingChildren) holder;
        //绑定数据
        holderShoppingChildren.mTxtShoppingTitle.setText(list.get(position).getTitle());//设置标题
        holderShoppingChildren.mTxtShoppingPrice.setText("¥"+list.get(position).getPrice()+"");//设置价格
        //得到商品的数量
        int num = list.get(position).getNum();
        holderShoppingChildren.mJiaJian.setNums(num);//设置显示的商品的数量
        //下载图片
        String path = list.get(position).getImages().split("\\|")[0];
        Uri uri = Uri.parse(path);
        holderShoppingChildren.mShoppingChildrenImage.setImageURI(uri);
        //得到是否未选中状态值 设置是否为选中状态
        int selected = list.get(position).getSelected();
        if(selected == 0){
            holderShoppingChildren.mCheckBox.setChecked(false);
        }else if(selected == 1){
            holderShoppingChildren.mCheckBox.setChecked(true);
        }

        //接口回调的到文本框得值
        holderShoppingChildren.mJiaJian.setShoppingNum(new CombinationView.IcallBackNum() {
            @Override
            public void getNnm(int nums) {
                Log.d("kkkk", "getNnm: "+nums);
                //得到数据信息 uid=71&sellerid=1&pid=1&selected=0&num=10
                int sellerid = list.get(position).getSellerid();
                int pid = list.get(position).getPid();
                int selecteds = list.get(position).getSelected();
                if(scIcallBack != null){
                    scIcallBack.getDataState(sellerid,pid,selecteds,nums);
                }
            }
        });

        //复选框的状态值改变
        holderShoppingChildren.mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                int shoppingNumss = holderShoppingChildren.mJiaJian.getShoppingNumss();//得到商品的数量
                int sellerid = list.get(position).getSellerid();
                int pid = list.get(position).getPid();
                int xuanZhong = 0;
                if(b == false){
                    xuanZhong = 0;
                }else {
                    xuanZhong = 1;
                }
                if(scIcallBack != null){
                    scIcallBack.getDataState(sellerid,pid,xuanZhong,shoppingNumss);
                }
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    static class ViewHolderShoppingChildren extends RecyclerView.ViewHolder {
        View view;
        CheckBox mCheckBox;
        SimpleDraweeView mShoppingChildrenImage;
        TextView mTxtShoppingTitle;
        TextView mTxtShoppingPrice;
        CombinationView mJiaJian;

        ViewHolderShoppingChildren(View view) {
            super(view);
            this.view = view;
            this.mCheckBox = (CheckBox) view.findViewById(R.id.checkBox);
            this.mShoppingChildrenImage = (SimpleDraweeView) view.findViewById(R.id.shopping_children_image);
            this.mTxtShoppingTitle = (TextView) view.findViewById(R.id.txt_shopping_title);
            this.mTxtShoppingPrice = (TextView) view.findViewById(R.id.txt_shopping_price);
            this.mJiaJian = (CombinationView) view.findViewById(R.id.jia_jian);
        }
    }

    //1.定义接口
    public interface SCIcallBack{
        void getDataState(int sellerid,int pid,int selected,int nums);//得到商品此时的状态值。。。。 参数还没写
    }
    //2.声明接口对象
    private SCIcallBack scIcallBack;
    //3.提供外部调用的方法
    public void setDataState(SCIcallBack scIcallBack){
        this.scIcallBack = scIcallBack;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值