软件编程
位置:首页>> 软件编程>> Android编程>> Android实现购物车功能

Android实现购物车功能

作者:jackeysun6032  发布时间:2022-08-14 19:06:55 

标签:Android,购物车

最近看了一些淘宝购物车的demo,于是也写了一个。

效果图如下:

Android实现购物车功能

主要代码如下:
actvity中的代码:


public class ShoppingCartActivity extends BaseActivity {

private List<Test> data;
 private ListView mListView;
 private ShoppingCartAdapter adapter;

private RelativeLayout rlRefresh;
 private TextView tvRefresh;
 private ProgressBar barRefresh;
 private LinearLayout clear;
 private CheckBox checkBox_select_all;
 private CheckBox checkBox_add;
 private TextView integral_sum;
 private int sum = 0;
 private int[] sumIntegral;
 private Context context;

@Override
 protected void onCreate(Bundle bundle) {
   // TODO Auto-generated method stub
   super.onCreate(bundle);
   setContentView(R.layout.activity_shopping_cart);
   initView();
 }

private void initView() {
   context = this;
   showpage = 1;
   isPermitFlag = true;
   data = new ArrayList<Test>();
   // 测试数据
   data.add(new Test("id", "color", "type", "100"));
   data.add(new Test("id", "color", "type", "200"));
   data.add(new Test("id", "color", "type", "300"));
   data.add(new Test("id", "color", "type", "0"));
   data.add(new Test("id", "color", "type", "300"));
   data.add(new Test("id", "color", "type", "100"));
   data.add(new Test("id", "color", "type", "500"));
   data.add(new Test("id", "color", "type", "0"));
   data.add(new Test("id", "color", "type", "900"));

adapter = new ShoppingCartAdapter(context, handler, data);

sumIntegral = new int[data.size() + 1];

checkBox_add = (CheckBox) findViewById(R.id.checkbox_add);
   integral_sum = (TextView) findViewById(R.id.integral_sum);
   clear = (LinearLayout) findViewById(R.id.clear);
   clear.setOnClickListener(new OnClickListener() {

@Override
     public void onClick(View v) {
       data.clear();
       adapter.notifyDataSetChanged();
       integral_sum.setText(0 + "");
       checkBox_select_all.setChecked(false);
       checkBox_add.setClickable(false);
     }
   });
   checkBox_select_all = (CheckBox) findViewById(R.id.checkbox_select);
   checkBox_select_all.setOnClickListener(new OnClickListener() {

@Override
     public void onClick(View v) {

HashMap<Integer, Boolean> isSelected = ShoppingCartAdapter
           .getIsSelected();
       Iterator iterator = isSelected.entrySet().iterator();
       List<Boolean> array = new ArrayList<Boolean>();//列表中checkbox选中状态
       List<Integer> nums = new ArrayList<Integer>();//列表中商品数量
       while (iterator.hasNext()) {
         HashMap.Entry entry = (HashMap.Entry) iterator.next();
         Integer key = (Integer) entry.getKey();
         Boolean val = (Boolean) entry.getValue();
         array.add(val);
       }
       for (int i = 0; i < data.size(); i++) {
         int num = data.get(i).getNum();
         int integral = Integer.valueOf(data.get(i).getIntegral());
         nums.add(num);
       }
       if (checkBox_select_all.isChecked()) {

for (int i = 0; i < data.size(); i++) {
           ShoppingCartAdapter.getIsSelected().put(i, true);
         }
         checkBox_add.setChecked(true);
         adapter.notifyDataSetChanged();
       } else {
         for (int i = 0; i < data.size(); i++) {
           ShoppingCartAdapter.getIsSelected().put(i, false);
         }
         checkBox_add.setChecked(false);
         adapter.notifyDataSetChanged();
         integral_sum.setText(0 + "");
       }

}
   });
   mListView= (ListView) findViewById(R.id.finance_list);
   mListView.setAdapter(adapter);
   mListView.setOnItemClickListener(new OnItemClickListener() {

@Override
     public void onItemClick(AdapterView<?> parent, View view,
         int position, long id) {
       Toast.makeText(context, position + "", Toast.LENGTH_LONG)
           .show();

int pos = position - 1;
       ViewHolder viewHolder = (ViewHolder) view.getTag();
       int num = data.get(pos).getNum();
       if (num == 0) {
         Toast.makeText(context, "请选择商品数量", Toast.LENGTH_LONG)
             .show();
       } else {
         boolean cu = !ShoppingCartAdapter.getIsSelected().get(pos);
         ShoppingCartAdapter.getIsSelected().put(pos, cu);
         adapter.notifyDataSetChanged();
         //遍历获取列表中checkbox的选中状态
         HashMap<Integer, Boolean> isSelected = ShoppingCartAdapter
             .getIsSelected();
         Iterator iterator = isSelected.entrySet().iterator();
         List<Boolean> array = new ArrayList<Boolean>();
         while (iterator.hasNext()) {
           HashMap.Entry entry = (HashMap.Entry) iterator.next();
           Integer key = (Integer) entry.getKey();
           Boolean val = (Boolean) entry.getValue();
           array.add(val);
         }
         if (Test.isAllFalse(array)) {
           checkBox_select_all.setChecked(false);
           checkBox_add.setChecked(false);
         }
         if (Test.isAllTrue(array)) {
           checkBox_select_all.setChecked(true);
           checkBox_add.setChecked(true);
         }
         if (Test.isHaveOneFasle(array)) {
           checkBox_select_all.setChecked(false);
         }
         if (Test.isHaveOneTrue(array)) {
           checkBox_add.setChecked(true);
         }
       }
     }
   });
 }

@SuppressLint("HandlerLeak")
 private Handler handler = new Handler(){
   @SuppressWarnings("unchecked")
   @Override
   public void handleMessage(Message msg) {
     super.handleMessage(msg);
     if(msg.what == 10){ //更改选中商品的总价格
       float price = (Float)msg.obj;
       if(price > 0){
         integral_sum.setText(price+"");
       }else{
         integral_sum.setText("0");
       }
     }
     else if(msg.what == 11){
       //列表选中状态
       List<Boolean> array = (List<Boolean>) msg.obj;
       if (Test.isAllFalse(array)) {
         checkBox_select_all.setChecked(false);
         checkBox_add.setChecked(false);
       }
       if (.isAllTrue(array)) {
         checkBox_select_all.setChecked(true);
         checkBox_add.setChecked(true);
       }
       if (Test.isHaveOneFasle(array)) {
         checkBox_select_all.setChecked(false);
       }
       if (Test.isHaveOneTrue(array)) {
         checkBox_add.setChecked(true);
       }
     }
   }
 };

actvity中XML的代码:


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:header=http://schemas.android.com/apk/res/com.sxc.test"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="@color/app_background"
 android:orientation="vertical" >

<com.autoserve.core.widget.HeaderWidget
   android:id="@+id/header"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_alignParentTop="true"
   header:text="我的购物车" />

<LinearLayout
   android:id="@+id/layout1"
   android:layout_width="match_parent"
   android:layout_height="40dp"
   android:layout_below="@id/header"
   android:layout_gravity="center"
   android:layout_marginTop="20dp"
   android:background="@color/white"
   android:orientation="horizontal" >

<LinearLayout
     android:layout_width="0dp"
     android:layout_height="match_parent"
     android:layout_marginLeft="10dp"
     android:layout_weight="1"
     android:gravity="center_vertical"
     android:orientation="horizontal" >

<CheckBox
       android:id="@+id/checkbox_select"
       style="@style/CustomCheckboxTheme"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" />

<TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="10dp"
       android:text="全选"
       android:textColor="@color/gry_666666"
       android:textSize="@dimen/small_size" />
   </LinearLayout>

<LinearLayout
     android:id="@+id/clear"
     android:layout_width="wrap_content"
     android:layout_height="match_parent"
     android:layout_marginRight="20dp"
     android:gravity="center_vertical|right"
     android:orientation="horizontal" >

<CheckBox
       android:layout_width="12dp"
       android:layout_height="12dp"
       android:background="@drawable/clear" />

<TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="5dp"
       android:text="清空购物车"
       android:textColor="#b61d1d"
       android:textSize="@dimen/small_size" />
   </LinearLayout>
 </LinearLayout>

<LinearLayout
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:layout_below="@id/layout1"
   android:layout_marginBottom="50dp"
   android:orientation="vertical" >

<View
     android:layout_width="match_parent"
     android:layout_height="0.1dp"
     android:background="@color/divider_color" />

<ListView
     android:id="@+id/finance_list"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:clickable="false"
     android:divider="@color/lucency" />

<include
     layout="@layout/include_refresh"
     android:visibility="gone" />
 </LinearLayout>

<LinearLayout
   android:layout_width="match_parent"
   android:layout_height="50dp"
   android:layout_alignParentBottom="true"
   android:orientation="horizontal" >

<LinearLayout
     android:layout_width="0dp"
     android:layout_height="match_parent"
     android:layout_weight="2"
     android:background="@color/gry_999999"
     android:gravity="center_vertical"
     android:orientation="horizontal" >

<LinearLayout
       android:layout_width="wrap_content"
       android:layout_height="match_parent"
       android:layout_marginLeft="5dp"
       android:layout_marginRight="5dp"
       android:gravity="center"
       android:orientation="horizontal" >

<CheckBox
         android:id="@+id/checkbox_add"
         style="@style/CustomCheckboxTheme2"
         android:layout_width="wrap_content"
         android:clickable="false"
         android:layout_height="wrap_content" />
     </LinearLayout>

<LinearLayout
       android:layout_width="0dp"
       android:layout_height="match_parent"
       android:layout_weight="1"
       android:gravity="center"
       android:orientation="horizontal" >

<TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="合计:"
         android:textColor="@color/white"
         android:textSize="@dimen/small_size" />

<TextView
         android:id="@+id/integral_sum"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginLeft="5dp"
         android:layout_marginRight="5dp"
         android:text="0"
         android:textColor="@color/theme_color"
         android:textSize="@dimen/small_size" />

<TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="积分"
         android:textColor="@color/white"
         android:textSize="@dimen/small_size" />
     </LinearLayout>
   </LinearLayout>

<TextView
     android:layout_width="0dp"
     android:layout_height="match_parent"
     android:layout_weight="1"
     android:background="@color/theme_color"
     android:gravity="center"
     android:text="结算"
     android:textColor="@color/white"
     android:textSize="@dimen/small_size" />
 </LinearLayout>

</RelativeLayout>

-XML中头部可以到网上找一个这里就不放上来了
.checkbox和button的样式可以根据个人喜好设置。

Adaper中的代码:


public class ShoppingCartAdapter extends BaseAdapter {

private Context context;
 private List<Test> loans;
 private LayoutInflater inflater;
 private static HashMap<Integer, Boolean> isSelected;
 private static HashMap<Integer, Integer> numbers;
 private Handler handler;
 int num;// 商品数量

static class ViewHolder { // 自定义控件集合
   public CheckBox ck_select;
   public ImageView pic_goods;
   public TextView id_goods;
   public TextView color_goods;
   public TextView type_goods;
   public TextView integral_goods;
   public AddMinusWidget add_minus;
   public LinearLayout layout;
   public TextView number;
   public Button minus;
   public Button plus;
 }

/**
  * 实例化Adapter
  *
  * @param context
  * @param data
  */
 public ShoppingCartAdapter(Context context, Handler handler, List<Test> data) {
   this.context = context;
   this.inflater = LayoutInflater.from(context);
   this.loans = data;
   this.handler = handler;
   isSelected = new HashMap<Integer, Boolean>();
   numbers = new HashMap<Integer, Integer>();
   initDate();
 }

private void initDate() {
   for (int i = 0; i < loans.size(); i++) {
     getIsSelected().put(i, false);
     getNumbers().put(i, 1);
   }
 }

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

@Override
 public Object getItem(int position) {
   return loans.get(position);
 }

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

@Override
 public View getView(final int position, View convertView, ViewGroup parent) {
   // 自定义视图
   ViewHolder itemView = null;
   if (convertView == null) {
     // 获取list_item布局文件的视图
     itemView = new ViewHolder();
     convertView = inflater.inflate(R.layout.list_shopping_cart_item,
         null);
     // 获取控件对象
     itemView.ck_select = (CheckBox) convertView
         .findViewById(R.id.ck_select);
     itemView.pic_goods = (ImageView) convertView
         .findViewById(R.id.pic_goods);
     itemView.id_goods = (TextView) convertView
         .findViewById(R.id.id_goods);
     itemView.color_goods = (TextView) convertView
         .findViewById(R.id.color_goods);
     itemView.type_goods = (TextView) convertView
         .findViewById(R.id.type_goods);
     itemView.integral_goods = (TextView) convertView
         .findViewById(R.id.integral_goods);
     itemView.number = (TextView) convertView.findViewById(R.id.number);
     itemView.minus = (Button) convertView.findViewById(R.id.minus);
     itemView.plus = (Button) convertView.findViewById(R.id.plus);
     convertView.setTag(itemView);
   } else {
     itemView = (ViewHolder) convertView.getTag();
   }

init(itemView, position);

itemView.ck_select.setChecked(getIsSelected().get(position));
   itemView.number.setText(getNumbers().get(position).toString());
   if (getIsSelected().get(position)) {
     itemView.ck_select.setChecked(true);
   } else {
     itemView.ck_select.setChecked(false);
   }

String a = itemView.number.getText().toString();
   loans.get(position).setNum(Integer.valueOf(a));

Test test = loans.get(position);
   itemView.id_goods.setText((CharSequence) test.getId());
   itemView.color_goods.setText((CharSequence) test.getColor());
   itemView.type_goods.setText((CharSequence) test.getType());
   itemView.integral_goods.setText((CharSequence) test.getIntegral());
   itemView.pic_goods.setImageResource(R.drawable.shopping);
   return convertView;
 }

private void init(final ViewHolder itemView, final int position) {

itemView.ck_select
       .setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
         public void onCheckedChanged(CompoundButton buttonView,
             boolean isChecked) {
           isSelected.put(position, true);
           getIsSelected().put(position, isChecked);
           itemView.ck_select.setChecked(getIsSelected().get(
               position));
           handler.sendMessage(handler.obtainMessage(10,
               getTotalPrice()));

Iterator iterator = isSelected.entrySet().iterator();
           List<Boolean> array = new ArrayList<Boolean>();
           while (iterator.hasNext()) {
             HashMap.Entry entry = (HashMap.Entry) iterator
                 .next();
             Integer key = (Integer) entry.getKey();
             Boolean val = (Boolean) entry.getValue();
             array.add(val);
           }
           handler.sendMessage(handler.obtainMessage(11, array));
         }
       });

final String numString = itemView.number.getText().toString();
   itemView.plus.setOnClickListener(new OnClickListener() {

@Override
     public void onClick(View v) {

if (numString == null || numString.equals("")) {
         num = 1;
         itemView.number.setText("1");
       } else {
         if (++num < 1) // 先加,再判断
         {
           num--;

Toast.makeText(context, "请输入一个大于0的数字",
               Toast.LENGTH_SHORT).show();
         } else {
           itemView.number.setText(String.valueOf(num));
           loans.get(position).setNum(num);
           numbers.put(position, num);
           handler.sendMessage(handler.obtainMessage(10,
               getTotalPrice()));
           Log.i("test", "+:" + num);
         }
       }
     }
   });
   itemView.minus.setOnClickListener(new OnClickListener() {

@Override
     public void onClick(View v) {

if (numString == null || numString.equals("")) {
         num = 1;
         itemView.number.setText("1");
       } else {
         if (--num < 1) // 先加,再判断
         {
           num++;
           Log.i("test", "-:" + num);
           Toast.makeText(context, "请输入一个大于0的数字",
               Toast.LENGTH_SHORT).show();
           Log.i("test", "-:" + num);
         } else {
           itemView.number.setText(String.valueOf(num));
           Log.i("test", "-:" + num);
           loans.get(position).setNum(num);
           numbers.put(position, num);
           handler.sendMessage(handler.obtainMessage(10,
               getTotalPrice()));
         }
       }

}
   });

}

/**
  * 计算选中商品的积分
  *
  * @return 返回需要付费的总积分
  */
 private float getTotalPrice() {
   Test bean = null;
   float totalPrice = 0;
   for (int i = 0; i < loans.size(); i++) {
     bean = loans.get(i);
     if (ShoppingCartAdapter.getIsSelected().get(i)) {
       totalPrice += bean.getNum()
           * Integer.valueOf(bean.getIntegral());
     }
   }
   return totalPrice;
 }

public static HashMap<Integer, Boolean> getIsSelected() {
   return isSelected;
 }

public static void setIsSelected(HashMap<Integer, Boolean> isSelected) {
   ShoppingCartAdapter.isSelected = isSelected;
 }

public static HashMap<Integer, Integer> getNumbers() {
   return numbers;
 }

public static void setNumbers(HashMap<Integer, Integer> numbers) {
   ShoppingCartAdapter.numbers = numbers;
 }
}

Adapter中的XML代码:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:descendantFocusability="blocksDescendants"
 android:background="@color/white"

android:orientation="vertical" >
 <View
   android:layout_width="match_parent"
   android:layout_height="0.1dp"
   android:background="@color/divider_color" />

<LinearLayout
   android:id="@+id/layout5"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:gravity="center_vertical"
   android:orientation="horizontal"
   android:padding="5dp" >

<CheckBox
     android:id="@+id/ck_select"
     style="@style/CustomCheckboxTheme"
     android:layout_width="wrap_content"
     android:focusable="false"
     android:layout_height="wrap_content"
     android:layout_marginRight="5dp" />

<ImageView
     android:id="@+id/pic_goods"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:scaleType="fitCenter"
     android:src="@drawable/shopping" />

<LinearLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginLeft="10dp"
     android:orientation="vertical" >

<TextView
       android:id="@+id/id_goods"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="短袜男士星期 POLO棉袜潮男秋冬款礼盒装"
       android:textColor="@color/gry_999999"
       android:textSize="@dimen/small_size" />

<LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="horizontal" >

<LinearLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:orientation="vertical" >

<LinearLayout
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:orientation="horizontal" >

<TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="颜色:"
             android:textColor="@color/gry_999999"
             android:textSize="12sp" />

<TextView
             android:id="@+id/color_goods"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="黑色"
             android:textColor="@color/gry_999999"
             android:textSize="12sp" />
         </LinearLayout>

<LinearLayout
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:orientation="horizontal" >

<TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="规格:"
             android:textColor="@color/gry_999999"
             android:textSize="12sp" />

<TextView
             android:id="@+id/type_goods"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="普通"
             android:textColor="@color/gry_999999"
             android:textSize="12sp" />
         </LinearLayout>

<LinearLayout
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:orientation="horizontal" >

<TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="所需积分"
             android:textColor="@color/theme_color"
             android:textSize="12sp" />

<TextView
             android:id="@+id/integral_goods"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="1000"
             android:layout_marginLeft="5dp"
             android:textColor="@color/theme_color"
             android:textSize="12sp" />
         </LinearLayout>
       </LinearLayout>

<LinearLayout
         android:layout_width="match_parent"
         android:layout_height="25dp"
         android:layout_gravity="bottom"
         android:layout_marginBottom="5dp"
         android:layout_marginRight="5dp"
         android:gravity="right"
         android:orientation="horizontal" >

<LinearLayout
   android:layout_width="80dp"
   android:layout_height="25dp"
   android:layout_gravity="right"
   android:background="@color/white"
   android:orientation="horizontal" >

<Button
     android:id="@+id/minus"
     android:layout_width="25dp"
     android:layout_height="match_parent"
     android:background="@drawable/kuangzi1"
     android:gravity="center"
     android:focusable="false"
     android:text="-"
     android:textColor="@color/black" >
   </Button>

<TextView
     android:id="@+id/number"
     android:layout_width="30dp"
     android:layout_height="match_parent"
     android:background="@drawable/kuangzi1"
     android:gravity="center"
     android:inputType="number"
     android:text="1"
     android:textColor="@color/black" >
   </TextView>

<Button
     android:id="@+id/plus"
     android:layout_width="25dp"
     android:layout_height="match_parent"
     android:background="@drawable/kuangzi1"
     android:gravity="center"
     android:focusable="false"
     android:text="+"
     android:textColor="@color/black" >
   </Button>
 </LinearLayout>
       </LinearLayout>
     </LinearLayout>
   </LinearLayout>
 </LinearLayout>

<View
   android:layout_width="match_parent"
   android:layout_height="0.1dp"
   android:background="@color/divider_color" />

</LinearLayout>

实体类:


package com.autoserve.net33.model;

public class Test {
 @Override
 public String toString() {
   return "test [id=" + id + ", color=" + color
       + ", type=" + type + ", integral=" + integral + "]";
 }

public String getId() {
   return id;
 }
 public void setId(String id) {
   this.id = id;
 }
 public String getColor() {
   return color;
 }
 public void setColor(String color) {
   this.color = color;
 }
 public String getType() {
   return type;
 }
 public void setType(String type) {
   this.type = type;
 }
 public String getIntegral() {
   return integral;
 }
 public void setIntegral(String integral) {
   this.integral = integral;
 }
 private String id;
 private String color;
 private String type;
 private String integral;
 private int num;//商品数量
 private int sumIntegral;
 private boolean isChoosed;   //商品是否在购物车中被选中

public Test(String id, String color, String type, String integral) {
   super();
   this.id = id;
   this.color = color;
   this.type = type;
   this.integral = integral;
 }
 public Test() {
   super();
 }

public int getNum() {
   return num;
 }

public void setNum(int num) {
   this.num = num;
 }

public int getSumIntegral() {
   return sumIntegral;
 }

public void setSumIntegral(int sumIntegral) {
   this.sumIntegral = sumIntegral;
 }

public boolean isChoosed() {
   return isChoosed;
 }

public void setChoosed(boolean isChoosed) {
   this.isChoosed = isChoosed;
 }  
}
0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com