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;
}
}
总体实现效果:
