购物车-----ListView 中CheckBox混乱

本文介绍了一个购物车功能的实现细节,包括如何解决ListView中CheckBox的状态混乱问题,商品数量的增减操作,以及商品的全选、取消全选等功能。通过使用Map来记录CheckBox的状态,并在Adapter中设置监听器,实现了商品的删除功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述

Demo:https://github.com/SunnyLine/NewShopCart/tree/master/MyApplication

这里只是购物车页面,地址管理,和订单生成都没有添加。主要处理ListView中CheckBox混乱问题,商品删除,数量增减,全选,取消全选,等。代码如下:

Adapter ,用Map记住CheckBox状态和CheckBox标记信息

    public void init() {
                bean = mList.get(position);
                tvGoodNum.setText(String.valueOf(bean.number));
                tvMedicineName.setText(bean.name);
                tvMedicineInfo.setText(bean.describe);
                tvGoodNum.setText(String.valueOf(bean.number));
                tvMedicinePrice.setText(getString(R.string.price, String.valueOf(bean.price)));
                ImageLoader.getInstance().displayImage(bean.img, imgIcon, options, listener);
                cbItem.setOnCheckedChangeListener(this);
                imgCartAdd.setOnClickListener(this);
                imgCartDel.setOnClickListener(this);
                imgCartCut.setOnClickListener(this);
                boolean b = isSelected.get(bean) != null && isSelected.get(bean) ? true : false;
                cbItem.setChecked(b);
            }

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    isSelected.put(bean, isChecked);
                    handler.sendEmptyMessage(1);
                } else if (isSelected.containsKey(bean) && !isChecked) {
                    isSelected.remove(bean);
                    handler.sendEmptyMessage(1);
                }
            }

Item 加减商品数量,删除商品

 @Override
            public void onClick(View view) {
                switch (view.getId()) {

                    case R.id.imgCartCut:
                        if (bean.number > 1) {
                            bean.number--;
                        }
                        tvGoodNum.setText(String.valueOf(bean.number));
                        handler.sendEmptyMessage(0);
                        break;
                    case R.id.imgCartAdd:
                        bean.number++;
                        tvGoodNum.setText(String.valueOf(bean.number));
                        handler.sendEmptyMessage(0);
                        break;
                    case R.id.imgCartDel:
                        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                        builder.setMessage("确定要删除吗?").setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                                if (isSelected.containsKey(bean)) {
                                    isSelected.remove(bean);
                                }
                                mList.remove(bean);
                                notifyDataSetChanged();
                                handler.sendEmptyMessage(0);
                            }
                        }).show();
                        break;
                }
            }

Handler 计算商品合计(选中的商品)

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 1:
                    cbSelectAll.setChecked(isSelected.size() == mList.size());
                case 0:
                    float total = 0f;
                    Iterator<Map.Entry<MedicineBean, Boolean>> iterator = isSelected.entrySet().iterator();
                    while (iterator.hasNext()) {
                        Map.Entry<MedicineBean, Boolean> entry = iterator.next();
                        MedicineBean b = entry.getKey();
                        total += b.number * b.price;
                    }
                    tvTotal.setText(getString(R.string.total, String.format("%.2f", total)));
                    break;
            }
        }
    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值