购物车逻辑

//我们需要在已经写好的二级列表基础上写如多选框和计算器

//主页面中


public class MainActivity extends AppCompatActivity implements ShopConstant.ShopView {

    private ShopConstant.ShopPresenter presenterImpi;
    private RecyclerView recycle;
    private CheckBox all;
    private BusinessAdapter adapter;
    private List<JsonBean.DataBean> dataBeanList;
    private TextView count;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        count = (TextView) findViewById(R.id.text_count);
        all = (CheckBox) findViewById(R.id.checkboxall);
        recycle = (RecyclerView) findViewById(R.id.recycle);
        presenterImpi = new ShopPresenterImpi();
        presenterImpi.attachView(this);
        presenterImpi.requestData();


    }

    @Override
    public void showData(final List<JsonBean.DataBean> data) {
                    all.setOnCheckedChangeListener(null);
                    all.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            for (int i=0;i<dataBeanList.size();i++){
                                dataBeanList.get(i).setBusinessChecked(all.isChecked());
                                for (int j=0;j<dataBeanList.get(i).getList().size();j++){
                                    dataBeanList.get(i).getList().get(j).setGoodsChecked(all.isChecked());
                                }
                            }
                            adapter.notifyDataSetChanged();
                            //计算总价
                            CalculatortotalCount();
                        }
                    });
                    dataBeanList = new ArrayList<JsonBean.DataBean>();
                    dataBeanList.addAll(data);
                    LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL, false);
                    recycle.setLayoutManager(manager);
                    adapter = new BusinessAdapter(R.layout.business_item, dataBeanList);
                    recycle.setAdapter(adapter);
                    adapter.setOnBusinessItemClickLisenter(new BusinessAdapter.OnBusinessItemClickLisenter() {
                        @Override
                        public void onCallBack() {
                            boolean result=true;
                            for (int i=0;i<dataBeanList.size();i++){
                                boolean businessChecked = dataBeanList.get(i).getBusinessChecked();
                                result=result&businessChecked;
                                for (int j=0;j<dataBeanList.get(i).getList().size();j++){
                                    boolean goodsChecked = dataBeanList.get(i).getList().get(j).getGoodsChecked();
                                    result=result & goodsChecked;
                                }
                            }
                            all.setChecked(result);
                            //计算总价
                            CalculatortotalCount();
                        }
                    });

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenterImpi.detachView(this);
    }
    //计算总价
    private void CalculatortotalCount(){
        double totalCount=0;
        //外层条目
        for (int i = 0; i < dataBeanList.size(); i++) {
            //内层条目
            for (int j = 0; j < dataBeanList.get(i).getList().size(); j++) {
                //判断内层条目是否勾选
                if (dataBeanList.get(i).getList().get(j).getGoodsChecked() == true){
                    //获取商品数据*商品价格
                    double price = dataBeanList.get(i).getList().get(j).getPrice();
                    int defalutNumber = dataBeanList.get(i).getList().get(j).getDefaultNumber();
                    double goodsPrice = price * defalutNumber;
                    totalCount = totalCount+goodsPrice;
                }
            }
        }
        //赋值
        count.setText("总价是:"+String.valueOf(totalCount));
    }

}

//在商家adapter中

public class BusinessAdapter extends BaseQuickAdapter<JsonBean.DataBean,BaseViewHolder> {

    OnBusinessItemClickLisenter onBusinessItemClickLisenter;
    private RecyclerView recycle_goods;
    //设置接口回调
    public interface OnBusinessItemClickLisenter{
        public void onCallBack();
    }
    public void setOnBusinessItemClickLisenter(OnBusinessItemClickLisenter onBusinessItemClickLisenter){
        this.onBusinessItemClickLisenter=onBusinessItemClickLisenter;
    }

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

    @Override
    protected void convert(BaseViewHolder helper, final JsonBean.DataBean item) {
        //设置商家名称
        helper.setText(R.id.business_name,item.getSellerName());
        //获取多选框的id(全选必须findbyid)
        final CheckBox business_checkbox = helper.getView(R.id.business_checkbox);
         //避免焦点抢占
       business_checkbox.setOnClickListener(null);
       //获取商家条目是否选中状态
        business_checkbox.setChecked(item.getBusinessChecked());
       //子商品条目数据源 
        recycle_goods = helper.getView(R.id.recycle_goods);
        List<JsonBean.DataBean.ListBean> list = item.getList();
        LinearLayoutManager manager = new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false);
        recycle_goods.setLayoutManager(manager);
        //设置子条目适配器
        final GoodsAdapter adapter = new GoodsAdapter(R.layout.goods_item, list);
        recycle_goods.setAdapter(adapter);
        //首先处理内部子条目控制外部条目
        adapter.setOnGoodsItemClickListener(new GoodsAdapter.OnGoodsItemClickListener() {
            @Override
            public void onCallBack() {
            //遍历获取所有子条目,只要有一个未勾选,商品类别也应该是未勾选
                boolean result = true;
                for (int i = 0; i < item.getList().size(); i++) {
                    result = result & item.getList().get(i).getGoodsChecked();
                }
                business_checkbox.setChecked(result);
                //刷新适配器
                adapter.notifyDataSetChanged();
                //把最后的状态进行回传
                onBusinessItemClickLisenter.onCallBack();
            }
        });
        //然后外层的商品类别条目需要控制里面的商品条目
        business_checkbox.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(business_checkbox.isChecked());
                }
                item.setBusinessChecked(business_checkbox.isChecked());
                notifyDataSetChanged();
                //把最后的状态进行回传
                onBusinessItemClickLisenter.onCallBack();
            }
        });
    }
}

//商品的adapter

public class GoodsAdapter extends BaseQuickAdapter<JsonBean.DataBean.ListBean,BaseViewHolder> {
    OnGoodsItemClickListener onGoodsItemClickListener;
  //接口回调
    public interface OnGoodsItemClickListener{
        public void onCallBack();
    }
    public void setOnGoodsItemClickListener(OnGoodsItemClickListener onGoodsItemClickListener) {
        this.onGoodsItemClickListener = onGoodsItemClickListener;
    }

    public GoodsAdapter(int layoutResId, @Nullable List<JsonBean.DataBean.ListBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, final JsonBean.DataBean.ListBean item) {
        helper.setText(R.id.goods_name,item.getTitle());
        helper.setText(R.id.goods_price,"¥"+item.getPrice());
          //获取多选框的id(全选必须findbyid)
        CheckBox goods_checkbox = helper.getView(R.id.goods_checkbox);
        goods_checkbox.setOnClickListener(null);
        goods_checkbox.setChecked(item.getGoodsChecked());
        
        String imagesString = item.getImages();
        String[] imagesStr = imagesString.split("\\|");
        Glide.with(mContext).load(imagesStr[0]).into((ImageView) helper.getView(R.id.goods_image));
        //以接口的方式把状态回传给外层
        goods_checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
               //Bean对象状态进行更新完毕
                item.setGoodsChecked(isChecked);
                onGoodsItemClickListener.onCallBack();
            }
        });
        //加减器
        Calculator calculator=helper.getView(R.id.calculator);
        calculator.setOncalculatorListener(new Calculator.OncalculatorListener() {
            @Override
            public void jia(int number) {
            //对新增的字段进行改动
                item.setDefaultNumber(number);
                onGoodsItemClickListener.onCallBack();
            }

            @Override
            public void jian(int number) {
            //对减少的字段进行改动
                item.setDefaultNumber(number);
                onGoodsItemClickListener.onCallBack();
            }
        });
    }
}

//自定义view加减器

public class Calculator extends LinearLayout implements View.OnClickListener {

    private Button jia;
    private Button jian;
    private TextView text_calculator;
    private String numberstring;


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

    public Calculator(Context context,  AttributeSet attrs) {
        super(context, attrs);
        View rootview = LayoutInflater.from(context).inflate(R.layout.calculator_item, this);
        jia = rootview.findViewById(R.id.button_jia);
        jian = rootview.findViewById(R.id.button_jian);
        text_calculator = rootview.findViewById(R.id.text_calculator);
        jia.setOnClickListener(this);
        jian.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        numberstring = text_calculator.getText().toString();
        int number = Integer.parseInt(numberstring);
        switch (v.getId()){
            case R.id.button_jia:
                number=number+1;
                text_calculator.setText(String.valueOf(number));
                oncalculatorListener.jia(number);
                break;
            case R.id.button_jian:
                number=number-1;
                if (number<0){
                    number=0;
                    text_calculator.setText(String.valueOf(number));
                }
                text_calculator.setText(String.valueOf(number));
                oncalculatorListener.jian(number);
                break;
        }
    }
    OncalculatorListener oncalculatorListener;
    public interface OncalculatorListener{
        public void jia(int number);
        public void jian(int number);
    }
    public void setOncalculatorListener(OncalculatorListener oncalculatorListener){
        this.oncalculatorListener=oncalculatorListener;
    }
}

//切记一定要在bean类中写上checkbox的方法 和 加减器的初始化数量(private int defaultNumber=1;)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值