电商项目购物车基本实现

private String path = "http://fun.51fanli.com/api/taohuasuan/getHotItems/?c_src=5&cids=9000&page=1&size=10";
    private ArrayList<Item> listItems;
    private int num;
    private Button selectAll;
    private Button deleteAll;
    private Button retuenAll;
    private TextView total;
    private ListView listView;
    private float totalPrice = 0;
    private MyAdapter adapter;

    private Handler handler = new Handler(){

        public void handleMessage(android.os.Message msg) {
            if (msg.what == 0) {
                listItems = (ArrayList<Item>) msg.obj;

                // 格式化各个商品的价格
                for (int i=0; i< listItems.size(); i++) {
                    float p = listItems.get(i).price;
                    listItems.get(i).price = (Math.round(p*100))/100;
                }

                adapter = new MyAdapter();
                listView.setAdapter(adapter);
                totalPrice = 0;
                for (int i=0; i<listItems.size(); i++) {
                    if (listItems.get(i).isChecked) {
                        totalPrice += listItems.get(i).price;
                    }
                }
                total.setText("总价:"+totalPrice);
            }
        };
    };

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

        initView();
        getInfoFromNet();

    }

    private void initView(){
        listView = (ListView) findViewById(R.id.listView);
        selectAll = (Button) findViewById(R.id.selectAll);
        deleteAll = (Button) findViewById(R.id.deleteAll);
        retuenAll = (Button) findViewById(R.id.retuenAll);
        total = (TextView) findViewById(R.id.total);

        selectAll.setOnClickListener(MainActivity.this);
        deleteAll.setOnClickListener(MainActivity.this);
        retuenAll.setOnClickListener(MainActivity.this);
    }

    // 定义方法请求并解析数据
    private void getInfoFromNet () {

        new Thread(){
            public void run() {
                HttpUtils util = new HttpUtils();

                util.configDefaultHttpCacheExpiry(10);

                util.send(HttpMethod.GET, path, new RequestCallBack<String>() {

                    @Override
                    public void onFailure(HttpException arg0, String arg1) {
                        // TODO Auto-generated method stub
                    }

                    @Override
                    public void onSuccess(ResponseInfo<String> arg0) {
                        String info = arg0.result;

                        Gson gson = new Gson();
                        ModelBean bean = gson.fromJson(info, ModelBean.class);

                        Message msg = Message.obtain();
                        msg.what = 0;
                        msg.obj = bean.data.items;
                        handler.sendMessage(msg);
                    }
                });
            };
        }.start();
    }

    // 创建XListView适配器
    private class MyAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return listItems.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {

            final ViewHolder holder;

            if (convertView == null) {
                holder = new ViewHolder();
                convertView = View.inflate(MainActivity.this, R.layout.item, null);
                holder.choose = (CheckBox) convertView.findViewById(R.id.choose);
                holder.cover = (ImageView) convertView.findViewById(R.id.cover);
                holder.name = (TextView) convertView.findViewById(R.id.name);
                holder.price = (TextView) convertView.findViewById(R.id.price);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            // 从集合中获得条目选中状态并赋值
            if(listItems.get(position).isChecked==true){
                holder.choose.setChecked(true);
            } else {
                holder.choose.setChecked(false);
            }

            // 设置选中复选框Click点击事件,若设置状态改变监听事件则其他操作后刷新集合会混乱价格
            holder.choose.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {

                    // 获得的选中状态为点击事件操作之后的状态
                    if(holder.choose.isChecked()){
                        listItems.get(position).isChecked = true;
                        totalPrice += listItems.get(position).price;
                        total.setText("总价:"+totalPrice);
                    } else {
                        listItems.get(position).isChecked = false;
                        totalPrice -= listItems.get(position).price;
                        total.setText("总价:"+totalPrice);
                    }
                }
            });

            // 为控件赋值
            ImageLoader.getInstance().displayImage(listItems.get(position).img1, holder.cover);
            holder.name.setText(listItems.get(position).name);
            holder.price.setText(listItems.get(position).price+"");

            return convertView;
        }
    }

    private class ViewHolder {
        public CheckBox choose;
        public ImageView cover;
        public TextView name;
        public TextView price;
    }

    // 全选、反选、删除按钮的监听
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            // 选中全部商品,操作之前先将总价清零,然后改变集合中条目状态
        case R.id.selectAll:
            totalPrice = 0;
            for (int i=0; i<listItems.size(); i++) {
                listItems.get(i).isChecked = true;
                totalPrice += listItems.get(i).price;
            }
            break;
            2016/9/25
            // 全不选状态,价格清零,集合条目状态改变
        case R.id.deleteAll:
            totalPrice = 0;
            for (int i=0; i<listItems.size(); i++) {
                listItems.get(i).isChecked = false;
            }
            break;
            // 反选、
        case R.id.retuenAll:
            totalPrice = 0;
            for (int i=0; i< listItems.size(); i++) {
                // 如果原来状态是选中,则设置为不选中
                if (listItems.get(i).isChecked) {
                    listItems.get(i).isChecked = false;
                }
                // 如果初始状态为未选中,则改为选中
                else if (!listItems.get(i).isChecked) {
                    listItems.get(i).isChecked = true;
                    totalPrice += listItems.get(i).price;
                }
            }
            break;

            // 删除选中状态,遍历选中商品,删除集合中的数据,然后删除集合中对应的数据
        case R.id.deleteCart:
            Iterator<DataBaseCartBean> it = listCart.iterator();
            while(it.hasNext()){
                DataBaseCartBean bean=it.next();
                if(bean.isChecked){
                    dao.deleteGoodsCart(MyApplication.getInstance().name, bean.url);
                    it.remove();
                }
            }
            money = 0;
            check.setChecked(false);
            break;
        default:
            break;
        }
        total.setText("总价:"+totalPrice);
        adapter.notifyDataSetChanged();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值