首页 > 系统 > Android > 正文

Android实现购物车功能

2020-04-11 10:50:56
字体:
来源:转载
供稿:网友

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

效果图如下:


主要代码如下:
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;  }  }

以上就是本文的全部内容,祝大家在新的一年里工作顺利,事事顺心,我们大家共同努力。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表