1. 程式人生 > >購物車-----ListView 中CheckBox混亂

購物車-----ListView 中CheckBox混亂

這裡寫圖片描述

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;
            }
        }
    };