购物车简单逻辑

1.商品adapter


package com.wen.yuekao;

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.TextView;
import android.widget.Toast;

import com.github.nukc.amountview.AmountView;

import java.util.List;




public class MyChildAdaptr extends RecyclerView.Adapter<MyChildAdaptr.MyViewHolder>{

    private Context context;
    private List<ChildBean> list;

    public MyChildAdaptr(Context context, List<ChildBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.child_item, null);
        MyViewHolder holder = new MyViewHolder(view);

        return holder;
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {

        holder.name.setText(list.get(position).getName());
        holder.price.setText(list.get(position).getPrice()+"");
        holder.isSelect.setChecked(list.get(position).isCheck());
       holder.productNum.setGoods_storage(10);//设置库存
        final TextView num = holder.productNum.findViewById(R.id.tvAmount);
        num.setText(list.get(position).getNum()+"");
        holder.productNum.setListener(new AmountView.OnAmountChangeListener() {
            @Override
            public void onAmountChange(View view, int amount) {
                list.get(position).setCheck(true);
                holder.isSelect.setChecked(list.get(position).isCheck());
                num.setText(amount+"");
                Toast.makeText(context, amount+"", Toast.LENGTH_SHORT).show();
                System.out.println("商品加减号=="+amount);
                if(childCheckBoxListener!=null){
                    childCheckBoxListener.OnProductNum(amount,position);
                }


            }
        });

        holder.isSelect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(holder.isSelect.isChecked()){
                    list.get(position).setCheck(true);
                }else{
                    list.get(position).setCheck(false);
                }

                if(childCheckBoxListener!=null){
                    //设置商品的点击事件
                    childCheckBoxListener.onChild(position);
                }
            }
        });



    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder {

        TextView name;
        TextView price;
        CheckBox isSelect;
        AmountView productNum;

        public MyViewHolder(View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.tv_name);
            price = itemView.findViewById(R.id.tv_price);
            isSelect = itemView.findViewById(R.id.cb_child_checko);
            productNum = itemView.findViewById(R.id.av_product_Num);


        }
    }

    private onChildCheckBoxListener childCheckBoxListener;

    public void setChildCheckBoxListener(onChildCheckBoxListener childCheckBoxListener){
        this.childCheckBoxListener = childCheckBoxListener;
    }


    interface onChildCheckBoxListener{
        void onChild(int childposition);
        void OnProductNum(int num,int childposition);
    }
}

2.店铺adapter

package com.wen.yuekao;

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

import java.util.List;



public class MyParentAdaptr extends RecyclerView.Adapter<MyParentAdaptr.MyViewHolder> {

    private  List<ParentBean> parentlist;
    private Context context;

    public MyParentAdaptr(List<ParentBean> parentlist, Context context) {
        this.parentlist = parentlist;
        this.context = context;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = View.inflate(context, R.layout.item, null);

        MyViewHolder holder = new MyViewHolder(view);

        return holder;
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {

        final List<ChildBean> childlist = parentlist.get(position).getChildlist();

        boolean flag=true;
        for (ChildBean childBean : childlist) {//遍历商品如果有一个没有选中则店铺不选中
            if(childBean.isCheck()==false){
                flag=false;
            }
        }
        holder.checkBox.setChecked(flag);

        holder.name.setText(parentlist.get(position).getParentname());
        holder.recyclerView.setLayoutManager(new GridLayoutManager(context,1));
        final MyChildAdaptr adapter = new MyChildAdaptr(context, parentlist.get(position).getChildlist());
        holder.recyclerView.setAdapter(adapter);

        holder.checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               boolean flag=false;
                if(holder.checkBox.isChecked()){
                    flag=true;
                }else{
                    flag=false;
                }

                for (ChildBean childBean : childlist) {
                    childBean.setCheck(flag);
                }

                //商品选中改变后,刷新商品adapter
                adapter.notifyDataSetChanged();
                if(onParentClicklistener!=null){
                    onParentClicklistener.ParentClick(position);
                }
            }
        });


        adapter.setChildCheckBoxListener(new MyChildAdaptr.onChildCheckBoxListener() {
            @Override
            public void onChild(int childposition) {

                boolean flag = true;
                for (ChildBean childBean : childlist) {
                    if(childBean.isCheck()==false){
                        flag = false;
                    }
                }

                System.out.println("点击=="+flag);
                holder.checkBox.setChecked(flag);


                if (onParentClicklistener!=null){
                    onParentClicklistener.ChildClick(position,childposition);
                }

            }

            @Override
            public void OnProductNum(int num, int childposition) {

                boolean flag = true;
                for (ChildBean childBean : parentlist.get(position).getChildlist()) {
                    if(childBean.isCheck()==false){
                        flag = false;
                    }
                }

                holder.checkBox.setChecked(flag);
                adapter.notifyDataSetChanged();
                if(onParentClicklistener!=null){

                    onParentClicklistener.updateProductNum(childposition,position,num);
                }
            }
        });

    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder {

        TextView name;
        RecyclerView recyclerView;
        CheckBox checkBox;

        public MyViewHolder(View itemView) {
            super(itemView);
            name=itemView.findViewById(R.id.tv_name);
            checkBox = itemView.findViewById(R.id.cb_checkbox);
          recyclerView =  itemView.findViewById(R.id.rv_parent_list);
        }
    }

    private OnParentClicklistener onParentClicklistener;

    public void setParentlistener(OnParentClicklistener onParentClicklistener){
        this.onParentClicklistener=onParentClicklistener;
    }

    interface OnParentClicklistener{
        void ParentClick(int parentposition);
        void ChildClick(int parentposition,int childposition);
        void updateProductNum(int childposition,int parentposition,int num);
    }
}

3.activity回调接口

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    @InjectView(R.id.rv_list)
    RecyclerView rvList;
    @InjectView(R.id.cb_allcheck)
    CheckBox cbAllcheck;
    @InjectView(R.id.tv_sumNum)
    TextView tvSumNum;
    @InjectView(R.id.tv_sumPrice)
    TextView tvSumPrice;
    private List<ChildBean> childList;
    private List<ParentBean> parentlist;
    private int productNumSum;
    private double productPriceSum;
    private DecimalFormat decimalFormat;
    private MyParentAdaptr adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.inject(this);

        decimalFormat = new DecimalFormat("#0.00");
        initView();
        initData();
        showAdapter();

    }

    private void showAdapter() {
        adapter = new MyParentAdaptr(parentlist, this);
        rvList.setAdapter(adapter);


        adapter.setParentlistener(new MyParentAdaptr.OnParentClicklistener() {
            @Override
            public void ParentClick(int parentposition) {//店铺的点击事件
                List<ChildBean> childlist = parentlist.get(parentposition).getChildlist();//得到当前点击店铺下商品的集合

                for (ChildBean childBean : childlist) {
                    if (childBean.isCheck() == true) {
                        productNumSum=productNumSum+childBean.getNum();//统计商品选择数量
                        productPriceSum = productPriceSum +Double.parseDouble(childBean.getPrice() * childBean.getNum()+"") ;//统计价格
                    }else{
                        productNumSum=productNumSum-childBean.getNum();
                        productPriceSum = productPriceSum-Double.parseDouble(childBean.getPrice() * childBean.getNum()+"");
                    }


                }

                tvSumNum.setText("商品个数:"+productNumSum);
                tvSumPrice.setText("商品价格:"+decimalFormat.format(productPriceSum)+"");
                // TODO:  此处可以进行网络请求,改变后台数据

                adapter.notifyDataSetChanged();//刷新数据

                boolean flag = true;
                for (ParentBean parentBean : parentlist) {
                    for (ChildBean childBean : parentBean.getChildlist()){//遍历所有商品
                        if(childBean.isCheck()==false){
                            flag=false;
                        }
                    }
                }

                cbAllcheck.setChecked(flag);

            }

            @Override
            public void ChildClick(int parentposition, int childposition) {//商品的点击事件

                ChildBean childBean1 = parentlist.get(parentposition).getChildlist().get(childposition);

                    if(childBean1.isCheck()==true){
                        productNumSum=productNumSum+childBean1.getNum();
                        productPriceSum = productPriceSum + Double.parseDouble(childBean1.getPrice()*childBean1.getNum()+"");
                    }else{
                        productNumSum=productNumSum-childBean1.getNum();
                        productPriceSum = productPriceSum - Double.parseDouble(childBean1.getPrice()*childBean1.getNum()+"");
                    }


                tvSumNum.setText("商品个数:"+productNumSum);
                tvSumPrice.setText("商品价格:"+decimalFormat.format(productPriceSum)+"");


                // TODO:  此处可以进行网络请求,同时改变后台数据


                adapter.notifyDataSetChanged();//刷新数据
                boolean flag = true;
                for (ParentBean parentBean : parentlist) {
                    for (ChildBean childBean : parentBean.getChildlist()) {
                        if(childBean.isCheck()==false){
                            flag = false;
                        }
                    }
                }

                cbAllcheck.setChecked(flag);

            }

            @Override
            public void updateProductNum(int childposition, int parentposition, int num) {//商品数量加减的监听


                
              ChildBean childBean = parentlist.get(parentposition).getChildlist().get(childposition);
             if(childBean.isCheck()==true){
              int newNum = num - childBean.getNum();
                System.out.println("数量num=="+num);
               System.out.println("数量childBean1.getNum*******"+childBean.getNum());
                 System.out.println("数量cb.getNum=="+childBean.getNum());
                System.out.println("******newNum*****"+newNum);
               productNumSum = productNumSum+newNum;
               productPriceSum = productPriceSum+Double.parseDouble(childBean.getPrice()+"")*newNum;
               }else{
              parentlist.get(parentposition).getChildlist().get(childposition).setCheck(true);

          productNumSum = productNumSum+num;

          productPriceSum = productPriceSum+Double.parseDouble(childBean.getPrice()+"")*num;

          }
        parentlist.get(parentposition).getChildlist().get(childposition).setNum(num);
        tvSumNum.setText("商品个数:"+productNumSum);
        tvSumPrice.setText("商品价格:"+decimalFormat.format(productPriceSum)+"");
} }); }


private void initView() {
    cbAllcheck.setOnClickListener(this);
    rvList.setLayoutManager(new GridLayoutManager(this, 1));
}

private void initData() {
    childList = new ArrayList<>();
    parentlist = new ArrayList<>();

    //添加第一个店铺
    childList.add(new ChildBean("商品1", 40, 1, false));
    childList.add(new ChildBean("商品2", 30, 1, false));
    parentlist.add(new ParentBean("店铺1", childList));

    ArrayList<ChildBean> childList1 = new ArrayList<>();
    //添加第二个店铺
    childList1.add(new ChildBean("商品A", 10, 1, false));
    childList1.add(new ChildBean("商品B", 15, 1, false));
    parentlist.add(new ParentBean("店铺2", childList1));

    ArrayList<ChildBean> childList2 = new ArrayList<>();
    //添加第三个店铺
    childList2.add(new ChildBean("商品I", 25, 1, false));
    parentlist.add(new ParentBean("店铺3", childList2));

    ArrayList<ChildBean> childList3 = new ArrayList<>();
    //添加第4个店铺
    childList3.add(new ChildBean("商品1", 30, 1, false));
    parentlist.add(new ParentBean("店铺4", childList3));


    ArrayList<ChildBean> childList4 = new ArrayList<>();
    //添加第二个店铺
    childList4.add(new ChildBean("商品A", 10, 1, false));
    childList4.add(new ChildBean("商品B", 15, 1, false));
    parentlist.add(new ParentBean("店铺5", childList4));

    ArrayList<ChildBean> childList5 = new ArrayList<>();
    //添加第4个店铺
    childList5.add(new ChildBean("商品1", 30, 1, false));
    parentlist.add(new ParentBean("店铺4", childList5));


    ArrayList<ChildBean> childList6 = new ArrayList<>();
    //添加第二个店铺
    childList6.add(new ChildBean("商品A", 10, 1, false));
    childList6.add(new ChildBean("商品B", 15, 1, false));


    parentlist.add(new ParentBean("店铺5", childList6));

}

@Override
public void onClick(View view) {
    switch (view.getId()){
        case  R.id.cb_allcheck:
            Toast.makeText(this, "全选", Toast.LENGTH_SHORT).show();
            AllSelect();
            break;
    }
}

private void AllSelect() {


        if(cbAllcheck.isChecked()){
            for (ParentBean parentBean : parentlist) {
                for (ChildBean childBean : parentBean.getChildlist()) {
                    if(childBean.isCheck()==false){
                        productNumSum=productNumSum+childBean.getNum();
                        productPriceSum = productPriceSum + Double.parseDouble(childBean.getPrice()*childBean.getNum()+"");
                        childBean.setCheck(true);//全选为true时,同时将为false的商品设置为true,并且进行价格,数量,运算

                        // TODO:  此处可以进行网络请求改变后台数据
                    }

                }
            }
        }else{
            for (ParentBean parentBean : parentlist) {
                for (ChildBean childBean : parentBean.getChildlist()) {
                    if(childBean.isCheck()==true){
                        productNumSum=productNumSum-childBean.getNum();
                        productPriceSum = productPriceSum - Double.parseDouble(childBean.getPrice()*childBean.getNum()+"");
                        childBean.setCheck(false);//全选为false时,同时将为true的商品设置为false,并且进行价格,数量,运算

                        // TODO:  此处可以进行网络请求改变后台数据

                    }
                }
            }
        }




    tvSumNum.setText("商品个数:"+productNumSum);
    tvSumPrice.setText("商品价格:"+decimalFormat.format(productPriceSum)+"");
    adapter.notifyDataSetChanged();
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值