最近看了一些淘宝购物车的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; } }
以上就是本文的全部内容,祝大家在新的一年里工作顺利,事事顺心,我们大家共同努力。
本文地址:https://www.stayed.cn/item/22030
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我