二级购物车

activity

package com.bw.cartwo.fragment;

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 com.bw.cartwo.R;
import com.bw.cartwo.adapter.CarAdapterOne;
import com.bw.cartwo.api.Api;
import com.bw.cartwo.base.BaseFragment;
import com.bw.cartwo.bean.Carinfo;
import com.bw.cartwo.bean.Shoopinginfo;
import com.bw.cartwo.content.ListContent;
import com.bw.cartwo.presenter.ListPresenter;

import java.util.List;

import butterknife.BindView;
import io.reactivex.disposables.CompositeDisposable;

public class ShoppingFragment extends BaseFragment implements ListContent.ListView, View.OnClickListener {
    @BindView(R.id.c_recycle)
    RecyclerView cRecycle;
    @BindView(R.id.c_check)
    CheckBox cCheck;
    @BindView(R.id.c_price)
    TextView cPrice;
    private CompositeDisposable disposable = new CompositeDisposable();
    private ListPresenter listPresenter;
    private CarAdapterOne carAdapterOne;
    private List<Carinfo.DataBean> list;

    @Override
    protected int onLayoutId() {
        return R.layout.fragment_shopping;
    }

    @Override
    protected void onView(View view) {
        LinearLayoutManager manager = new LinearLayoutManager(getActivity());
        cRecycle.setLayoutManager(manager);
        listPresenter = new ListPresenter();
        listPresenter.attachView(this);
        cCheck.setOnClickListener(this);
    }

    @Override
    protected void onData() {
        listPresenter.getCarData(Api.Carurl, 51, disposable);
    }

    @Override
    public void getListData(List<Shoopinginfo.ResultBean> result) {

    }

    @Override
    public void getCarData(List<Carinfo.DataBean> data) {
        this.list = data;
        carAdapterOne = new CarAdapterOne(getActivity(), list);
        cRecycle.setAdapter(carAdapterOne);

        //价格和状态
        carAdapterOne.setOnPriceOne(new CarAdapterOne.OnPriceOne() {
            @Override
            public void isPrice(boolean check, int price) {
                //状态
                cCheck.setChecked(check);
                //价格
                cPrice.setText(price + "");
                //刷新适配器
                carAdapterOne.notifyDataSetChanged();
            }
        });

        //加减器
        carAdapterOne.setOnCheckOne(new CarAdapterOne.OnCheckOne() {
            @Override
            public void isCheck(int prices) {
                //价格
                cPrice.setText(prices + "");
                //刷新适配器
                carAdapterOne.notifyDataSetChanged();
            }
        });

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.c_check:
                setmCheckBar(cCheck.isChecked());
                break;

        }
    }

    //设置状态
    private void setmCheckBar(boolean checked) {
        int prices = 0;
        if (checked) {
            //设置一级的状态
            for (int i = 0; i < list.size(); i++) {
                list.get(i).setCheckOne(true);
                //设置二级
                for (int j = 0; j < list.get(i).getList().size(); j++) {
                    //设置二级状态
                    list.get(i).getList().get(j).setCheckTwo(true);
                    //设置价格
                    prices += list.get(i).getList().get(j).getNum() * list.get(i).getList().get(j).getPrice();
                }
            }
            //赋值价格
            cPrice.setText(prices + "");
        } else {
            //设置一级的状态
            for (int i = 0; i < list.size(); i++) {
                list.get(i).setCheckOne(false);
                //设置二级
                for (int j = 0; j < list.get(i).getList().size(); j++) {
                    //设置二级状态
                    list.get(i).getList().get(j).setCheckTwo(false);
                }
            }
            //赋值价格
            prices = 0;
            cPrice.setText(prices + "");
        }
        carAdapterOne.notifyDataSetChanged();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        listPresenter.detachView(this);
        boolean disposed = disposable.isDisposed();
        if (!disposed) {
            disposable.clear();
            disposable.dispose();
        }
    }
}

oneAdapter

package com.bw.cartwo.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
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.bw.cartwo.R;
import com.bw.cartwo.bean.Carinfo;

import java.util.List;

public class CarAdapterOne extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context context;
    private List<Carinfo.DataBean> data;

    public CarAdapterOne(Context context, List<Carinfo.DataBean> data) {
        this.context = context;
        this.data = data;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_carone, null);
        CarHolder carHolder = new CarHolder(view);
        return carHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i) {
        final CarHolder carHolder = (CarHolder) viewHolder;
        //加上这个不让会错
        carHolder.caro_chenck.setOnCheckedChangeListener(null);

        carHolder.caro_title.setText(data.get(i).getSellerName());

        LinearLayoutManager manager = new LinearLayoutManager(context);
        carHolder.caro_recycle.setLayoutManager(manager);
        carHolder.caro_chenck.setChecked(data.get(i).isCheckOne());


        List<Carinfo.DataBean.ListBean> list = data.get(i).getList();
        CarAdapterTwo carAdapterTwo = new CarAdapterTwo(context, list);
        carHolder.caro_recycle.setAdapter(carAdapterTwo);

        //一级复选框改变 监听改变
        carHolder.caro_chenck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                //设置状态
                data.get(i).setCheckOne(isChecked);
                //价格
                int prices = 0;
                //控制全选的变量
                int num = 0;
                //联动商品复选框
                for (int j = 0; j < data.size(); j++) {
                    //商家的状态
                    if (data.get(j).isCheckOne()) {
                        //设置商品
                        for (int s = 0; s < data.get(j).getList().size(); s++) {
                            //设置状态为
                            data.get(j).getList().get(s).setCheckTwo(true);
                            //价格
                            prices += data.get(j).getList().get(s).getNum() * data.get(j).getList().get(s).getPrice();
                        }
                        //控制全选的变量++
                        num++;
                    } else {
                        //设置商品
                        for (int s = 0; s < data.get(j).getList().size(); s++) {
                            //设置状态为
                            data.get(j).getList().get(s).setCheckTwo(false);
                        }
                    }
                }
                //判断全选变量是否与当前集合长度是否相等
                if (num == data.size()) {
                    if (onPriceOne != null) {
                        onPriceOne.isPrice(true, prices);
                    }
                } else {
                    if (onPriceOne != null) {
                        onPriceOne.isPrice(false, prices);
                    }
                }
            }
        });

        //二级购物车复选框监听
        carAdapterTwo.setOnClickTwo(new CarAdapterTwo.OnClickTwo() {
            @Override
            public void isCheck() {
                //总价
                int prices = 0;
                //控制全选的变量
                int num = 0;
                //控制一级复选框状态变量
                int fist = 0;
                for (int j = 0; j < data.size(); j++) {
                    for (int s = 0; s < data.get(j).getList().size(); s++) {
                        //二级复选宽选中
                        if (data.get(j).getList().get(s).isCheckTwo()) {
                            //价格
                            prices += data.get(j).getList().get(s).getNum() * data.get(j).getList().get(s).getPrice();
                            //控制一级复选框状态变量
                            fist++;
                        }
                    }
                    //在第一个循环判断
                    if (fist == data.get(j).getList().size()) {
                        //设置二级复选框
                        data.get(j).setCheckOne(true);
                        //数量++
                        num++;
                    } else {
                        data.get(j).setCheckOne(false);
                    }
                    //初始化
                    fist = 0;
                }
                //判断全选变量是否与当前集合长度是否相等
                if (num == data.size()) {
                    if (onPriceOne != null) {
                        onPriceOne.isPrice(true, prices);
                    }
                } else {
                    if (onPriceOne != null) {
                        onPriceOne.isPrice(false, prices);
                    }
                }
            }
        });

        //加减器
        carAdapterTwo.setOnPriceTwo(new CarAdapterTwo.OnPriceTwo() {
            @Override
            public void isPrice() {
                int prices = 0;
                //设置一级的状态
                for (int j = 0; j < data.size(); j++) {
                    //判断一级状态
                    if (data.get(j).isCheckOne()) {
                        for (int s = 0; s < data.get(j).getList().size(); s++) {
                            //判断二级状态
                            if (data.get(j).getList().get(s).isCheckTwo()) {
                                prices += data.get(j).getList().get(s).getNum() * data.get(j).getList().get(s).getPrice();
                            }
                        }
                    } else {
                        for (int s = 0; s < data.get(j).getList().size(); s++) {
                            //判断二级状态
                            if (data.get(j).getList().get(s).isCheckTwo()) {
                                prices += data.get(j).getList().get(s).getNum() * data.get(j).getList().get(s).getPrice();
                            }
                        }
                    }
                }
                if (onCheckOne != null) {
                    onCheckOne.isCheck(prices);
                }
            }
        });
    }

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

    private class CarHolder extends RecyclerView.ViewHolder {
        private TextView caro_title;
        private final CheckBox caro_chenck;
        private final RecyclerView caro_recycle;

        public CarHolder(@NonNull View itemView) {
            super(itemView);
            caro_title = itemView.findViewById(R.id.caro_title);
            caro_chenck = itemView.findViewById(R.id.caro_chenck);
            caro_recycle = itemView.findViewById(R.id.caro_recycle);
        }
    }

    //加减器
    public interface OnCheckOne {
        void isCheck(int prices);
    }

    public OnCheckOne onCheckOne;

    public void setOnCheckOne(OnCheckOne onCheckOne) {
        this.onCheckOne = onCheckOne;
    }


    //全选框的状态和价格回调
    public interface OnPriceOne {
        void isPrice(boolean check, int price);
    }

    public OnPriceOne onPriceOne;

    public void setOnPriceOne(OnPriceOne onPriceOne) {
        this.onPriceOne = onPriceOne;
    }
}

twoAdapter

package com.bw.cartwo.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
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.bw.cartwo.R;
import com.bw.cartwo.bean.Carinfo;
import com.bw.cartwo.view.NumberLayout;
import com.facebook.drawee.view.SimpleDraweeView;

import java.util.List;


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

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

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_cartwo, null);
        CarHolderTwo carHolderTwo = new CarHolderTwo(view);
        return carHolderTwo;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i) {
        final CarHolderTwo carHolderTwo = (CarHolderTwo) viewHolder;
        carHolderTwo.cart_image.setImageURI(list.get(i).getDetailUrl());
        carHolderTwo.cart_title.setText(list.get(i).getTitle());
        carHolderTwo.cart_price.setText(list.get(i).getBargainPrice() + "");
        carHolderTwo.cart_chenck.setChecked(list.get(i).isCheckTwo());

        //设置商品复选框
        carHolderTwo.cart_chenck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                //赋值
                list.get(i).setCheckTwo(isChecked);
                //回调
                if (onClickTwo != null) {
                    onClickTwo.isCheck();
                }
            }
        });
        //加减器

        carHolderTwo.numberLayout.getData(list, i, list.get(i).getNum());

        carHolderTwo.numberLayout.setOnNumberClick(new NumberLayout.OnNumberClick() {
            @Override
            public void isNum() {
                //会调
                if (onPriceTwo != null) {
                    onPriceTwo.isPrice();
                    notifyDataSetChanged();
                }
            }
        });

    }

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


    private class CarHolderTwo extends RecyclerView.ViewHolder {

        private TextView cart_title, cart_price;
        private final SimpleDraweeView cart_image;
        private final CheckBox cart_chenck;
        private final NumberLayout numberLayout;

        public CarHolderTwo(@NonNull View itemView) {
            super(itemView);
            cart_image = itemView.findViewById(R.id.cart_image);
            cart_title = itemView.findViewById(R.id.cart_title);
            cart_price = itemView.findViewById(R.id.cart_price);
            cart_chenck = itemView.findViewById(R.id.cart_chenck);
            numberLayout = itemView.findViewById(R.id.cart_number);
        }
    }

    //复选框
    public interface OnClickTwo {
        void isCheck();
    }

    public OnClickTwo onClickTwo;

    public void setOnClickTwo(OnClickTwo onClickTwo) {
        this.onClickTwo = onClickTwo;
    }

    //加减器
    public interface OnPriceTwo {
        void isPrice();
    }

    public OnPriceTwo onPriceTwo;

    public void setOnPriceTwo(OnPriceTwo onPriceTwo) {
        this.onPriceTwo = onPriceTwo;
    }
}

//加减

package com.bw.cartwo.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.bw.cartwo.R;
import com.bw.cartwo.bean.Carinfo;

import java.util.List;


public class NumberLayout extends LinearLayout implements View.OnClickListener {

    private TextView number;
    private List<Carinfo.DataBean.ListBean> list;
    private int i;


    public void getData(List<Carinfo.DataBean.ListBean> list, int i, int num) {
        this.list = list;
        this.i = i;
        this.number.setText(num + "");
    }

    public NumberLayout(Context context) {
        super(context);
    }

    public NumberLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        View view = LayoutInflater.from(context).inflate(R.layout.item_number, this);
        TextView jia = findViewById(R.id.n_jia);
        number = findViewById(R.id.n_number);
        TextView jian = findViewById(R.id.n_jian);

        jia.setOnClickListener(this);
        jian.setOnClickListener(this);
    }

    public NumberLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.n_jia:
                String trim = number.getText().toString().trim();
                int n = Integer.valueOf(trim);
                n++;
                list.get(i).setNum(n);
                if (onNumberClick != null) {
                    onNumberClick.isNum();
                }
                break;
            case R.id.n_jian:
                String trims = number.getText().toString().trim();
                int m = Integer.valueOf(trims);
                if (m == 1) {
                    return;
                }
                m--;
                list.get(i).setNum(m);
                if (onNumberClick != null) {
                    onNumberClick.isNum();
        }
        break;
    }
}


public interface OnNumberClick {
    void isNum();

}

    public OnNumberClick onNumberClick;

    public void setOnNumberClick(OnNumberClick onNumberClick) {
        this.onNumberClick = onNumberClick;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值