购物车多选购买

1 篇文章 0 订阅
1 篇文章 0 订阅

在这里插入图片描述

fragment_cart.xml

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




</RelativeLayout>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="购物车空空如也呦~\n快去选购吧!"
    android:id="@+id/tvEmptyCart"
    android:gravity="center"
    android:textSize="20sp"
    android:layout_marginTop="60dp"
    android:layout_centerHorizontal="true"/>

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/lv_Cart"
    android:layout_below="@+id/relativeHeader"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_above="@+id/linearLayout"/>
<LinearLayout
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:padding="10dp"
    android:layout_alignParentStart="true">

    <CheckBox
        android:id="@+id/cart_check_all"
        android:layout_weight="1"
        android:text="全选"
        android:layout_width="0dp"
        android:layout_height="wrap_content" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:text="合计:"
        android:id="@+id/textView2"/>
    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="40dp"
        android:gravity="center_vertical"
        android:text="¥0.00"
        android:layout_gravity="center"
        android:textColor="#ff0000"
        android:id="@+id/cart_tv_totalPrice"/>
    <Button
        android:id="@+id/cart_bt_delete"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="删除"
        android:textSize="16sp"
        android:focusable="false"
        android:background="@drawable/cart_btn_submit"
        android:textColor="#ffffff"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        />
    <Button
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:text="结算"
        android:textSize="16sp"
        android:background="@drawable/cart_btn_submit"
        android:textColor="#ffffff"
        android:id="@+id/cart_bt_submit"/>
</LinearLayout>
<!--<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <include layout="@layout/activity_bottom"/>
</LinearLayout>-->

在这里插入图片描述

item_cart_lv_cartitem.xml

<CheckBox
    android:id="@+id/cart_cb_choice"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:focusable="false"
    android:focusableInTouchMode="false" />
<com.loopj.android.image.SmartImageView
    android:id="@+id/cart_iv_BookPic"
    android:layout_width="54dp"
    android:layout_height="80dp"
    android:scaleType="centerCrop"
    android:src="@drawable/ic_launcher"/>
<RelativeLayout
    android:layout_width="0dp"
    android:layout_weight="1"
    android:layout_height="80dp"
    android:paddingLeft="20dp"
    >
    <TextView
        android:id="@+id/cart_tv_bookname"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:text="全面开战"
        android:gravity="bottom"
        android:textSize="16sp"
        android:singleLine="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"/>
    <TextView
        android:id="@+id/cart_tv_price"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:text="200.00¥"
        android:textColor="#dd0000"
        android:gravity="top"
        android:textSize="12sp"
        android:layout_below="@+id/cart_tv_bookname"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"/>
    <TextView
        android:layout_below="@+id/cart_tv_bookname"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:text="x2"
        android:id="@+id/cart_tv_count"
        android:layout_marginLeft="10dp"
        android:gravity="top"
        android:textColor="#999999"
        android:layout_toRightOf="@+id/cart_tv_price"
        android:layout_toEndOf="@+id/cart_tv_price"/>
</RelativeLayout>

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="100dp"
    android:layout_height="30dp"
    android:layout_gravity="center"
    android:background="@drawable/cart_bg_numberpicker">

    <ImageView
        android:id="@+id/cart_iv_jian"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:background="@null"
        android:src="@drawable/cart_ico_m"
        android:scaleType="center"
       />

    <TextView
        android:id="@+id/cart_tv_num"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:text="1"
        android:gravity="center"
           android:textColor="#ffffff"
        android:layout_height="30dp"/>

    <ImageView
        android:id="@+id/cart_iv_jia"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:background="@null"
        android:src="@drawable/cart_ico_p"
        android:scaleType="center"
        />
</LinearLayout>

cartAdapter

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

import com.loopj.android.image.SmartImageView;

import java.util.List;

import cn.edu.huel.ebook.R;
import cn.edu.huel.ebook.domain.Cart;



public class CartAdapter extends BaseAdapter {
    private List<Cart> products;//集合,存放ListView的商品实体类数据
    private Context context;//上下文
    /*
   * 1:设置接口
   * */
    private View.OnClickListener onAddNum;//加商品数量
    private View.OnClickListener onDelNum; //减商品数量
    private View.OnClickListener onCheck;//商品选中
    /*
    * 2:创建构造方法
    * */
    public CartAdapter(List<Cart> products, Context context){
        this.products = products;
        this.context=context;
    }
    /*
    * 3.创建接口方法
    *
    * */
    public void setOnAddNum(View.OnClickListener onAddNum){
        this.onAddNum=onAddNum;
    }
    public void setOnSubNum(View.OnClickListener onDelNum){
        this.onDelNum = onDelNum;
    }
    public void setOnCheck(View.OnClickListener onCheck){
        this.onCheck = onCheck;
    }
    /*
    * 重写自定义适配器的除了getView()的三个方法
    * */
    @Override
    public int getCount() {
         int r=0;
        if(products!=null){
            r=products.size();
        }
        return r;
    }
    @Override
    public Object getItem(int i) {
        return products.get(i);
    }
    @Override
    public long getItemId(int i) {
        return i;
    }
    /*
    * d定义内部类
    * */
    private static class ViewHolder{
        //商品名称,数量,总价
        private TextView item_product_name;
        private TextView item_product_num;
        private TextView item_product_price;
        private TextView item_product_count;
        //商品的图标:
        private SmartImageView item_iv_img;
        //是否选择
        private CheckBox item_cb_check;
        //增减商品数量
        private ImageView item_iv_add;
        private ImageView item_iv_sub;
    }
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View v=null;
        final int position=i;
        if(view!=null){
            v=view;
        }else{
            v= LayoutInflater.from(context).inflate(R.layout.item_cart_lv_cartitem,viewGroup,false);
        }
        ViewHolder holder = (ViewHolder) v.getTag();
        if(holder==null) {
            holder = new ViewHolder();
            holder.item_product_name = (TextView) v.findViewById(R.id.cart_tv_bookname);
            holder.item_product_num = (TextView) v.findViewById(R.id.cart_tv_num);
            holder.item_product_price = (TextView) v.findViewById(R.id.cart_tv_price);
            holder.item_product_count= (TextView) v.findViewById(R.id.cart_tv_count);
            holder.item_iv_img= (SmartImageView) v.findViewById(R.id.cart_iv_BookPic);
            //设置接口回调,注意参数不是上下文,它需要ListView所在的Activity或者Fragment处理接口回调方法
            holder.item_cb_check = (CheckBox) v.findViewById(R.id.cart_cb_choice);
            holder.item_cb_check.setOnClickListener(onCheck);
        }
            holder.item_iv_add = (ImageView) v.findViewById(R.id.cart_iv_jia);
            holder.item_iv_add.setOnClickListener(onAddNum);
            holder.item_iv_sub = (ImageView) v.findViewById(R.id.cart_iv_jian);
            holder.item_iv_sub.setOnClickListener(onDelNum);
            holder.item_product_name.setText(products.get(i).getProduct().getName());
            holder.item_product_num.setText(products.get(i).getProduct().getPnum() + "");
            holder.item_product_count.setText("X"+products.get(i).getProduct().getPnum() + "");
            holder.item_product_price.setText("单价:"+products.get(i).getProduct().getPrice() + "");
            holder.item_cb_check.setChecked(products.get(i).isChecked());
            holder.item_iv_img.setImageUrl(context.getResources().getString(R.string.url)+products.get(i).getProduct().getImgurl());
        //设置Tag,用于判断用户当前点击的哪一个列表项的按钮,解决问题:如何知道你点击的按钮是哪一个列表项中的
            holder.item_iv_add.setTag(i);
            holder.item_iv_sub.setTag(i);
            holder.item_cb_check.setTag(i);
            v.setTag(holder);
          return v;
    }
}

**

cart类

**

public class Cart {
	private int id; //收藏品编号
	private cn.edu.huel.ebook.entity.User user;
	private Product product;
	private boolean checked;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public cn.edu.huel.ebook.entity.User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public Product getProduct() {
		return product;
	}
	public void setProduct(Product product) {
		this.product = product;
	}
	public boolean isChecked() {
		return checked;
	}

	public void setChecked(boolean checked) {
		this.checked = checked;
	}
	@Override
	public String toString() {
		return "Cart [id=" + id + ", user=" + user + ", product=" + product + "]";
	}
}

Product

public class Product implements Serializable{
    private String id; // 商品编号
    private String name; // 名称
    //	private String author; //作者
    private double price; // 价格
    private String category; // 分类
    private int pnum; // 数量
    private String imgurl; // 图片路径
    private String description; // 描述
    private boolean checked;

    public boolean isChecked() {
        return checked;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public int getPnum() {
        return pnum;
    }

    public void setPnum(int pnum) {
        this.pnum = pnum;
    }

    public String getImgurl() {
        return imgurl;
    }

    public void setImgurl(String imgurl) {
        this.imgurl = imgurl;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return "Product{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", category='" + category + '\'' +
                ", pnum=" + pnum +
                ", imgurl='" + imgurl + '\'' +
                ", description='" + description + '\'' +
                '}';
    }
}
``user

在这里插入代码片


cartActivity页面

    public class CartActivity extends AppCompatActivity implements View.OnClickListener{
        private ImageView cart_iv_back;//返回图片
        private ListView mlistView;
        TextView cart_tv_num, cart_tv_price;//右上角当前商品数量和底部当前已选中商品的价格
        Button cart_bt_delete, cart_bt_submit;//底部删除当前选中按钮、购买按钮
        ImageView cart_iv_jia, cart_iv_jian;//加减按钮
        TextView cart_tv_totalPrice;//总价钱
        private List<Cart> datas;//数据源
        String cart_id="";//购物车ID
        private String totalprice;
        CartAdapter cartAdapter;//自定义适配器
        private CheckBox cart_check_all;//左下角全选
        protected String mStrResponse;
        protected String mStrResponseError;
        private Thread transmission;//网络访问线程
        private Handler handler = new Handler();//用于将更新界面的线程发送到GUI线程的消息队列中
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.fragment_cart);
            mlistView = (ListView) findViewById(R.id.lv_Cart);//找到listview
            initView();//控件初始化
             initData();//数据初始化
            //全选按钮,点击更新视图所有CheckBox
            cart_check_all.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (cart_check_all.isChecked()) {
                        checkAllItem();
                    } else {
                        uncheckAllItem();
                    }
                    changeMoney();
                }
            });
            //删除按钮
            cart_bt_delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    for (int i=0;i<datas.size();i++) {
                         Boolean check =datas.get(i).isChecked();
                         if (check) {
                             //删除购物车中的进行拼接
                          cart_id+="cart"+datas.get(i).getId();
                        }
                        Log.i("cart_id",cart_id);
                    }
                    DeleteCart();//连接后台数据库删除
                    deleteChooseItem();//从列表中删除
                    //更新UI
                    cartAdapter.notifyDataSetChanged();
                    //更新当前价格显示
                    changeMoney();
                }
            });
            //购买按钮
            cart_bt_submit.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    List<OrderItem> orderItemList=new ArrayList<OrderItem>(); ;
                    for(int i=0;i<datas.size();i++){
                            Boolean check =datas.get(i).isChecked();
                            if (check){
                                //把选择的商品传到确认页面内,测试期间可以把以下删除
                                Product product=new Product();
                                OrderItem orderItem1=new OrderItem();
                                String name = datas.get(i).getProduct().getName();
                                product.setName(name);
                                orderItem1.setP(product);
                                int count=Double.valueOf(datas.get(i).getProduct().getPnum()).intValue();
                                product.setPnum(count);
                                orderItem1.setBuynum(count);
                                Double price=datas.get(i).getProduct().getPrice();
                                product.setPrice(price);
                                String product_id=datas.get(i).getProduct().getId();
                                product.setId(product_id);
                                String image=datas.get(i).getProduct().getImgurl();
                                product.setImgurl(image);
                                orderItem1.setP(product);
                               orderItemList.add(orderItem1);
                            }
                    }
                    totalprice=cart_tv_totalPrice.getText().toString();
                }
            });
        }
        //获取控件资源
        private void initView() {
            cart_iv_back = (ImageView) findViewById(R.id.iv_cart_back);
            cart_tv_num = (TextView) findViewById(R.id.cart_tv_num);//位于加减之间的商品购买数量
            cart_check_all = (CheckBox) findViewById(R.id.cart_check_all);//全选
            cart_tv_totalPrice = (TextView) findViewById(R.id.cart_tv_totalPrice);//总价钱
            cart_bt_delete = (Button) findViewById(R.id.cart_bt_delete);//删除
            cart_bt_submit = (Button) findViewById(R.id.cart_bt_submit);//提交购买
            cart_tv_price = (TextView) findViewById(R.id.cart_tv_price);//单价
            cart_iv_jia = (ImageView) findViewById(R.id.cart_iv_jia);//加按钮
            cart_iv_jian = (ImageView) findViewById(R.id.cart_iv_jian);//减按钮
            cart_iv_back.setOnClickListener(this);//返回按钮监听
        }
    
    //初始化数据,设置适配器
    private void initData() {
 //初始化数量为1
                for(int i=0;i<5;i++){
                    datas.get(i).getProduct().setPnum(1);
             
                    datas.get(i).getProduct().setName("好看"+i);
                    datas.get(i).getProduct().setPrice(22);
                }
                cartAdapter = new CartAdapter(datas, CartActivity.this);
                mlistView.setAdapter(cartAdapter);
               cartAdapter.setOnAddNum(CartActivity.this);
                cartAdapter.setOnSubNum(CartActivity.this);
                cartAdapter.setOnCheck(CartActivity.this);
    }
        /*
        * 设置列表全选,并刷新列表
        * */
        private void checkAllItem() {
            for (int i = 0; i < datas.size(); i++) {
                boolean ischecked = datas.get(i).isChecked();
                ischecked = !ischecked;
                datas.get(i).setChecked(cart_check_all.isChecked());
            }
            cartAdapter.notifyDataSetChanged();
            changeMoney();
        }
    
        //设置列表不全选,并刷新列表
        private void uncheckAllItem() {
            for (int i = 0; i < datas.size(); i++) {
                datas.get(i).setChecked(false);
            }
            cartAdapter.notifyDataSetChanged();
        }
    
        /*
        * 选中删除条目
        * */
        private void deleteChooseItem() {
            int j = datas.size();
            for (int i = j - 1; i >= 0; i--) {
                if (datas.get(i).isChecked()) {
                    datas.remove(i);
                }
            }
        }
        /*判断是否全选*/
        private boolean isTheBoxallCheck() {
            for (int i = 0; i < datas.size(); i++) {
                if (!datas.get(i).isChecked()) {
                    return false;
                }
            }
            return true;
        }
        /*
        * 计算当前选择的总钱数
        * */
        private void changeMoney() {
            double allMoney = 0;//当前全部商品的总价格
            for (int i = 0; i < datas.size(); i++) {
                int count = Double.valueOf(datas.get(i).getProduct().getPnum()).intValue();
                //double itempv = Double.valueOf(datas.get(i).getProduct().getPrice()).intValue();
                Double itempv=datas.get(i).getProduct().getPrice();
                if (datas.get(i).isChecked()) {
                    allMoney += itempv * count;
                }
            }
            cart_tv_totalPrice.setText(allMoney + "");
        }
    /*点击加减按钮*/
      @Override
        public void onClick(View v) {
           Object tag = v.getTag();
                switch (v.getId()) {
                    case R.id.iv_cart_back:
                        CartActivity.this.finish();
                        break;
                    case R.id.cart_iv_jia: //点击添加数量按钮,执行相应的处理
                        // 获取 Adapter 中设置的 Tag
                        if (tag != null && tag instanceof Integer) { //解决问题:如何知道你点击的按钮是哪一个列表项中的,通过Tag的position
                            int position = (Integer) tag;
                            //更改集合的数据
                            int num = datas.get(position).getProduct().getPnum();
                            num++;
                            datas.get(position).getProduct().setPnum(num); //修改集合中商品数量
                            //解决问题:点击某个按钮的时候,如果列表项所需的数据改变了,如何更新UI
                            //更新UI
                            cartAdapter.notifyDataSetChanged();
                        }
                        break;
                    case R.id.cart_iv_jian: //点击减少数量按钮 ,执行相应的处理
                        // 获取 Adapter 中设置的 Tag
                        if (tag != null && tag instanceof Integer) {
                            int position = (Integer) tag;
                            //更改集合的数据
                            int num = datas.get(position).getProduct().getPnum();
                            if (num > 1) {
                                num--;
                                datas.get(position).getProduct().setPnum(num); //修改集合中商品数量
                                cartAdapter.notifyDataSetChanged();
                            }else{
                                Toast.makeText(CartActivity.this,"该宝贝不能再减少了",Toast.LENGTH_SHORT).show();
    
                            }
                        }
                        break;
                    case R.id.cart_cb_choice: //处理选中时间
                        // 获取 Adapter 中设置的 Tag
                        if (tag != null && tag instanceof Integer) {
                            int position = (Integer) tag;
                            //更改集合的数据
                            boolean ischecked = datas.get(position).isChecked();
                            ischecked = !ischecked;
                            datas.get(position).setChecked(ischecked);
                            if (isTheBoxallCheck()) {
                                cart_check_all.setChecked(true);
                            } else {
                                cart_check_all.setChecked(false);
                            }
                            cartAdapter.notifyDataSetChanged();
                            //更新价格显示
                            changeMoney();
                        }
                        break;
                default:
                    break;
            }
        }
    总体实现效果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019041123441495.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMTY1OTE4,size_16,color_FFFFFF,t_70)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值