接着购物车的全选 结算

主页面
package com.android.alex.shoppingcartdemo.ui.activity;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
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.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;

import com.android.alex.shoppingcartdemo.R;
import com.android.alex.shoppingcartdemo.data.beans.ShoppingCartBean;
import com.android.alex.shoppingcartdemo.di.contract.ShoppingCartContract;
import com.android.alex.shoppingcartdemo.di.presenter.ShoppingCartPresenter;
import com.android.alex.shoppingcartdemo.ui.adapter.BusinessAdapter;
import com.google.gson.Gson;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class ShoppingCartActivity extends AppCompatActivity implements ShoppingCartContract.IView, View.OnClickListener {

    @BindView(R.id.rv_business)
    RecyclerView rvBusiness;
    @BindView(R.id.srl_container)
    com.scwang.smartrefresh.layout.SmartRefreshLayout srlContainer;
    @BindView(R.id.cb_all)
    CheckBox cbAll;
    @BindView(R.id.btn_price)
    Button btnPrice;
    @BindView(R.id.tv_count)
    TextView tvCount;
    private ShoppingCartContract.IPresenter presenter;
    private Context mContext;
    private List<ShoppingCartBean.DataBean> businessList;
    private BusinessAdapter adapter;
    private AlertDialog alertDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        mContext = this;
        //获取P层
        presenter = new ShoppingCartPresenter();
        presenter.attachView(this);
        presenter.requestData();
        //对上下拉的处理
        srlContainer.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
                presenter.requestData();
                refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败
            }
        });
        srlContainer.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(RefreshLayout refreshlayout) {
                refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败
            }
        });

    }

    @Override
    public void showLoading() {
        alertDialog = new AlertDialog.Builder(mContext) .setMessage("刷新中").create();
        alertDialog.show();
    }

    @Override
    public void hideLoading() {
        alertDialog.hide();
    }

    @Override
    public void showData(String mCartString) {
        cbAll.setOnCheckedChangeListener(null);
        //全选反选的处理
        //cbAll.setOnCheckedChangeListener(this);
        cbAll.setOnClickListener(this);
        //数据解析展示
        ShoppingCartBean cartBean = new Gson().fromJson(mCartString, ShoppingCartBean.class);
        //外层商家条目的数据源
        businessList = cartBean.getData();
        //TODO 不建议这样处理,手动移除第一个条目
        //设置布局管理器
        LinearLayoutManager manager = new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false);
        rvBusiness.setLayoutManager(manager);
        //设置适配器
        adapter = new BusinessAdapter(R.layout.recycler_business_item, businessList);
        rvBusiness.setAdapter(adapter);
        adapter.setOnBusinessItemClickLisenter(new BusinessAdapter.OnBusinessItemClickLisenter() {
            @Override
            public void onCallBack() {
                boolean result = true;
                for (int i = 0; i < businessList.size(); i++) {
                    //外层选中状态
                    boolean businessChecked = businessList.get(i).getBusinessChecked();
                    result = result & businessChecked;
                    for (int j = 0; j < businessList.get(i).getList().size(); j++) {
                        //里层选中状态
                        boolean goodsChecked = businessList.get(i).getList().get(j).getGoodsChecked();
                        result = result & goodsChecked;
                    }
                }
                cbAll.setChecked(result);
                //计算总价
                calculateTotalCount();
            }
        });
    }

    private void calculateTotalCount() {
        //对总价进行计算
        double totalCount = 0;
        //外层条目
        for (int i = 0; i < businessList.size(); i++) {
            //内层条目
            for (int j = 0; j < businessList.get(i).getList().size(); j++) {
                //判断内层条目是否勾选
                if (businessList.get(i).getList().get(j).getGoodsChecked() == true){
                    //获取商品数据*商品价格
                    double price = businessList.get(i).getList().get(j).getPrice();
                    int defalutNumber = businessList.get(i).getList().get(j).getDefalutNumber();
                    double goodsPrice = price * defalutNumber;
                    totalCount = totalCount+goodsPrice;
                }
            }
        }
        tvCount.setText("总价是:"+String.valueOf(totalCount));
    }

    @OnClick(R.id.btn_price)
    public void onViewClicked() {
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.detachView(this);
    }

   /* @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        //全选逻辑的处理
        for (int i = 0; i < businessList.size(); i++) {
            //首先让外层的商家条目全部选中
            businessList.get(i).setBusinessChecked(isChecked);
            //然后让里层的商品条目全部选中
            for (int j = 0; j < businessList.get(i).getList().size(); j++) {
                businessList.get(i).getList().get(j).setGoodsChecked(isChecked);
            }
        }
        adapter.notifyDataSetChanged();
    }*/

    @Override
    public void onClick(View v) {
        //全选逻辑的处理
        for (int i = 0; i < businessList.size(); i++) {
            //首先让外层的商家条目全部选中
            businessList.get(i).setBusinessChecked(cbAll.isChecked());
            //然后让里层的商品条目全部选中
            for (int j = 0; j < businessList.get(i).getList().size(); j++) {
                businessList.get(i).getList().get(j).setGoodsChecked(cbAll.isChecked());
            }
        }
        adapter.notifyDataSetChanged();
        //计算总价
        calculateTotalCount();
    }

}
Badapter
package com.android.alex.shoppingcartdemo.ui.adapter;

import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;

import com.android.alex.shoppingcartdemo.R;
import com.android.alex.shoppingcartdemo.data.beans.ShoppingCartBean;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;

import java.util.List;

/**
 * @author Alex
 * @date 2019/1/15.
 * GitHub:https://github.com/wangshuaialex
 */
public class BusinessAdapter extends BaseQuickAdapter<ShoppingCartBean.DataBean, BaseViewHolder> {
    OnBusinessItemClickLisenter onBusinessItemClickLisenter;

    public interface OnBusinessItemClickLisenter {
        public void onCallBack();
    }

    public void setOnBusinessItemClickLisenter(OnBusinessItemClickLisenter onBusinessItemClickLisenter) {
        this.onBusinessItemClickLisenter = onBusinessItemClickLisenter;
    }

    public BusinessAdapter(int layoutResId, @Nullable List<ShoppingCartBean.DataBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, final ShoppingCartBean.DataBean item) {
        //设置商家名称
        helper.setText(R.id.tv_business_name, item.getSellerName());
        //设置商家下的子商品条目
        RecyclerView rv_goods = helper.getView(R.id.rv_goods);
        //避免焦点抢占
        final CheckBox cb_business = helper.getView(R.id.cb_business);
        cb_business.setOnCheckedChangeListener(null);
        //************************************
        //获取商家条目是否选中状态
        cb_business.setChecked(item.getBusinessChecked());
        //子商品条目数据源
        List<ShoppingCartBean.DataBean.ListBean> goodsList = item.getList();
        LinearLayoutManager manager = new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false);
        //设置子条目适配器
        final GoodsAdapter goodsAdapter = new GoodsAdapter(R.layout.recycler_goods_item, goodsList);
        rv_goods.setLayoutManager(manager);
        rv_goods.setAdapter(goodsAdapter);
        //首先处理内部子条目控制外部条目
        goodsAdapter.setOnGoodsItemClickLisenter(new GoodsAdapter.OnGoodsItemClickLisenter() {
            @Override
            public void onCallBack() {
                //遍历获取所有子条目,只要有一个未勾选,商品类别也应该是未勾选
                boolean result = true;
                for (int i = 0; i < item.getList().size(); i++) {
                    result = result & item.getList().get(i).getGoodsChecked();
                }
                cb_business.setChecked(result);
                //刷新适配器
                goodsAdapter.notifyDataSetChanged();
                //把最后的状态进行回传
                onBusinessItemClickLisenter.onCallBack();
            }
        });
        //然后外层的商品类别条目需要控制里面的商品条目
        cb_business.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //获取商品类别勾选状态
                //外层商品类别条目获取的关键:cb_business.isChecked()
                for (int i = 0; i < item.getList().size(); i++) {
                    item.getList().get(i).setGoodsChecked(cb_business.isChecked());
                }
                item.setBusinessChecked(cb_business.isChecked());
                notifyDataSetChanged();
                //把最后的状态进行回传
                onBusinessItemClickLisenter.onCallBack();
            }
        });


    }

}
子诗佩妮
package com.android.alex.shoppingcartdemo.ui.adapter;

import android.support.annotation.Nullable;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;

import com.android.alex.shoppingcartdemo.R;
import com.android.alex.shoppingcartdemo.data.beans.ShoppingCartBean;
import com.android.alex.shoppingcartdemo.ui.widget.CalculatorView;
import com.bumptech.glide.Glide;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;

import java.util.List;

/**

  • @author Alex

  • @date 2019/1/15.

  • GitHub:https://github.com/wangshuaialex
    */
    public class GoodsAdapter extends

    BaseQuickAdapter<ShoppingCartBean.DataBean.ListBean, BaseViewHolder> {
    OnGoodsItemClickLisenter onGoodsItemClickLisenter;

     public void setOnGoodsItemClickLisenter(OnGoodsItemClickLisenter onGoodsItemClickLisenter) {
         this.onGoodsItemClickLisenter = onGoodsItemClickLisenter;
     }
    
     //接口回调
     public interface OnGoodsItemClickLisenter {
         public void onCallBack();
     }
    
     public GoodsAdapter(int layoutResId, @Nullable List<ShoppingCartBean.DataBean.ListBean> data) {
         super(layoutResId, data);
     }
    
    
     @Override
     protected void convert(BaseViewHolder helper, final ShoppingCartBean.DataBean.ListBean item) {
         helper.setText(R.id.tv_goodsPrice, "¥:" + item.getPrice());
         helper.setText(R.id.tv_goodsTitle, item.getTitle());
         ImageView iv_goodsIcon = helper.getView(R.id.iv_goodsIcon);
         String imagesString = item.getImages();
         String[] imagesStr = imagesString.split("\\|");
         Glide.with(mContext).load(imagesStr[0]).into(iv_goodsIcon);
         //避免焦点抢占
         final CheckBox cb_goods = helper.getView(R.id.cb_goods);
         cb_goods.setOnCheckedChangeListener(null);
         cb_goods.setChecked(item.getGoodsChecked());
         //以接口的方式把状态回传给外层
         cb_goods.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
             @Override
             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                 //Bean对象状态进行更新完毕
                 item.setGoodsChecked(isChecked);
                 onGoodsItemClickLisenter.onCallBack();
             }
         });
         //加减器
         CalculatorView calculatorView = helper.getView(R.id.cv_calculatorView);
         calculatorView.setOnCalCulatorLisenter(new CalculatorView.OnCalCulatorLisenter() {
             @Override
             public void onDecrese(int number) {
                 //对新增的字段进行改动
                 item.setDefalutNumber(number);
                 onGoodsItemClickLisenter.onCallBack();
             }
    
             @Override
             public void onAdd(int number) {
                 //对新增的字段进行改动
                 item.setDefalutNumber(number);
                 onGoodsItemClickLisenter.onCallBack();
             }
         });
     }
    

}
加减器
package com.android.alex.shoppingcartdemo.ui.widget;

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

import com.android.alex.shoppingcartdemo.R;

/**

  1. @author Alex

  2. @date 2019/1/16.

  3. GitHub:https://github.com/wangshuaialex
    */
    public class CalculatorView extends LinearLayout implements View.OnClickListener {

  4. private Button btn_add;
    private Button btn_decrease;
    private TextView tv_number;

    public CalculatorView(Context context, AttributeSet attrs) {
        super(context, attrs);
        //填充的条目布局
        View rootView = LayoutInflater.from(context).inflate(R.layout.calculator_layout,
    

    this);
    btn_add = rootView.findViewById(R.id.btn_add);
    btn_decrease = rootView.findViewById(R.id.btn_decrease);
    tv_number = rootView.findViewById(R.id.tv_number);
    btn_add.setOnClickListener(this);
    btn_decrease.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        String numberString = tv_number.getText().toString();
        int number = Integer.parseInt(numberString);
        switch (v.getId()) {
            case R.id.btn_decrease:
                number = number - 1;
                if (number < 0) {
                    number = 0;
                    //最小数量为0
                    tv_number.setText(String.valueOf(number));
                }
                tv_number.setText(String.valueOf(number));
                //接口回调回传数字
                onCalCulatorLisenter.onDecrese(number);
                break;
            case R.id.btn_add:
                number = number + 1;
                tv_number.setText(String.valueOf(number));
                //接口回调回传数字
                onCalCulatorLisenter.onAdd(number);
                break;
    
        }
    }
    
    OnCalCulatorLisenter onCalCulatorLisenter;
    
    public interface OnCalCulatorLisenter {
        //减少
        public void onDecrese(int number);
    
        //增加
        public void onAdd(int number);
    }
    
    public void setOnCalCulatorLisenter(OnCalCulatorLisenter onCalCulatorLisenter) {
        this.onCalCulatorLisenter = onCalCulatorLisenter;
    }
    

}
加减去的布局

<?xml version="1.0" encoding="utf-8"?>

<Button
    android:id="@+id/btn_decrease"
    android:layout_width="@dimen/dp_40"
    android:layout_height="@dimen/dp_40"
    android:background="@mipmap/decrease"
    android:padding="@dimen/dp_10" />

<TextView
    android:id="@+id/tv_number"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@null"
    android:inputType="number"
    android:text="@string/hint_number" />

<Button
    android:id="@+id/btn_add"
    android:layout_width="@dimen/dp_40"
    android:layout_height="@dimen/dp_40"
    android:background="@mipmap/add"
    android:padding="@dimen/dp_10" />

猜你喜欢

转载自blog.csdn.net/qq_42805722/article/details/86552566