时间:2021-05-19
最近看了一些淘宝购物车的demo,于是也写了一个。
效果图如下:
主要代码如下:
actvity中的代码:
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; } }以上就是本文的全部内容,祝大家在新的一年里工作顺利,事事顺心,我们大家共同努力。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Android实现购物车加减功能,效果图如下所示:publicclassadderViewextendsLinearLayoutimplementsView.O
本文实例为大家分享了java实现购物车功能的具体代码,供大家参考,具体内容如下1需要实现1、实现淘淘商城的购物车功能2购物车功能2.1功能说明1、商品加入购物车
本文实例讲述了PHP实现的购物车类。分享给大家供大家参考。具体分析如下:该购物车类是基于CodeIgniter的购物车类仿写实现的。购物车基本功能如下:1)将物
本文实例为大家分享了js实现购物车功能的具体代码,供大家参考,具体内容如下使用html配合原生js实现购物车功能*实现购物车商品数量的加减,注意数量最少为1,数
本文实例为大家分享了Android实现购物车功能的具体代码,供大家参考,具体内容如下MainActivity布局:importandroid.os.Bundle