本文实例为大家分享了Android Studio实现简单购物车的具体代码,供大家参考,具体内容如下
MainActivity的布局文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:app = "http://schemas.android.com/apk/res-auto" xmlns:tools = "http://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" android:orientation = "vertical" tools:context = ".MainActivity" > < LinearLayout android:id = "@+id/top_bar" android:layout_width = "match_parent" android:layout_height = "48dp" android:background = "#E24146" android:orientation = "vertical" > < TextView android:id = "@+id/title" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:gravity = "center" android:minHeight = "48dp" android:text = "购物车" android:textColor = "#ffffff" android:textSize = "17sp" /> </ LinearLayout > < ListView android:id = "@+id/listview" android:layout_width = "match_parent" android:layout_height = "0dp" android:layout_weight = "1" android:childIndicator = "@null" android:groupIndicator = "@null" > </ ListView > < LinearLayout android:layout_width = "match_parent" android:layout_height = "50dp" android:orientation = "horizontal" > < LinearLayout android:layout_width = "0dp" android:layout_height = "match_parent" android:layout_weight = "2.5" android:gravity = "center_vertical" android:orientation = "horizontal" > < CheckBox android:id = "@+id/all_chekbox" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_gravity = "center_vertical" android:layout_marginLeft = "10dp" android:layout_marginRight = "4dp" android:checkMark = "?android:attr/listChoiceIndicatorMultiple" android:gravity = "center" android:minHeight = "64dp" android:paddingLeft = "10dp" android:textAppearance = "?android:attr/textAppearanceLarge" android:visibility = "visible" /> < TextView android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_marginLeft = "5dp" android:text = "合计:" android:textSize = "16sp" android:textStyle = "bold" /> < TextView android:id = "@+id/tv_total_price" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "¥0.00" android:textSize = "16sp" android:textStyle = "bold" /> </ LinearLayout > < TextView android:id = "@+id/tv_delete" android:layout_width = "0dp" android:layout_height = "match_parent" android:layout_weight = "1" android:clickable = "true" android:background = "#a29e9e" android:gravity = "center" android:text = "删除" android:textColor = "#FAFAFA" /> < TextView android:id = "@+id/tv_go_to_pay" android:layout_width = "0dp" android:layout_height = "match_parent" android:layout_weight = "1" android:background = "#E24146" android:clickable = "true" android:gravity = "center" android:text = "付款(0)" android:textColor = "#FAFAFA" /> </ LinearLayout > </ LinearLayout > |
条目的布局文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "match_parent" android:layout_height = "match_parent" android:orientation = "vertical" > < View android:layout_width = "match_parent" android:layout_height = "1dp" android:background = "#CCCCCC" /> < LinearLayout android:layout_width = "match_parent" android:layout_height = "wrap_content" android:orientation = "horizontal" > < CheckBox android:id = "@+id/check_box" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_gravity = "center_vertical" android:layout_marginLeft = "10dp" android:layout_marginRight = "4dp" android:checkMark = "?android:attr/listChoiceIndicatorMultiple" android:gravity = "center" android:minHeight = "64dp" android:minWidth = "32dp" android:textAppearance = "?android:attr/textAppearanceLarge" android:visibility = "visible" /> < ImageView android:id = "@+id/iv_adapter_list_pic" android:layout_width = "85dp" android:layout_height = "85dp" android:layout_marginBottom = "15dp" android:layout_marginTop = "13dp" android:scaleType = "centerCrop" android:src = "@mipmap/ic_launcher" /> < RelativeLayout android:layout_width = "wrap_content" android:layout_height = "match_parent" android:layout_gravity = "center_vertical" android:layout_marginTop = "10dp" android:layout_marginLeft = "13dp" > < TextView android:id = "@+id/tv_goods_name" android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_marginRight = "10dp" android:layout_marginTop = "20dp" android:ellipsize = "end" android:maxLines = "2" android:text = "商品" android:textSize = "14sp" /> < RelativeLayout android:layout_width = "match_parent" android:layout_height = "wrap_content" android:layout_alignParentBottom = "true" android:layout_marginBottom = "30dp" android:orientation = "horizontal" > < TextView android:id = "@+id/tv_goods_price" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_centerVertical = "true" android:singleLine = "true" android:textSize = "14sp" android:textStyle = "bold" android:text = "价格" /> < TextView android:id = "@+id/tv_type_size" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_centerVertical = "true" android:layout_marginLeft = "10dp" android:layout_toRightOf = "@+id/tv_goods_price" android:singleLine = "true" android:textSize = "10sp" /> < LinearLayout android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_alignParentRight = "true" android:layout_centerVertical = "true" android:layout_marginRight = "15dp" android:orientation = "horizontal" > < TextView android:id = "@+id/tv_reduce" android:layout_width = "25dp" android:layout_height = "25dp" android:gravity = "center" android:background = "#ccc" android:text = "一" android:textSize = "12sp" /> < TextView android:id = "@+id/tv_num" android:layout_width = "25dp" android:layout_height = "25dp" android:gravity = "center" android:singleLine = "true" android:text = "1" android:textSize = "12sp" /> < TextView android:id = "@+id/tv_add" android:layout_width = "25dp" android:layout_height = "25dp" android:gravity = "center" android:text = "十" android:background = "#ccc" android:textSize = "12sp" /> </ LinearLayout > </ RelativeLayout > </ RelativeLayout > </ LinearLayout > </ LinearLayout > |
CartAdapter适配器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
public class CaetAdapter extends BaseAdapter { private Context context; private List<HashMap<String, String>> list; private HashMap<String, Integer> pitchOnMap; public HashMap<String, Integer> getPitchOnMap() { return pitchOnMap; } public void setPitchOnMap(HashMap<String, Integer> pitchOnMap) { this .pitchOnMap = pitchOnMap; } public CaetAdapter(Context context, List<HashMap<String, String>> list) { this .context = context; this .list = list; pitchOnMap = new HashMap<>(); for ( int i = 0 ; i < list.size(); i++) { pitchOnMap.put(list.get(i).get( "id" ), 0 ); } } @Override public int getCount() { return list.size(); } @Override public Object getItem( int position) { return list.get(position); } @Override public long getItemId( int position) { return position; } @Override public View getView( final int position, View convertView, ViewGroup parent) { convertView = View.inflate(context, R.layout.item_layout, null ); final CheckBox checkBox; ImageView icon; final TextView name, price, num, type, reduce, add; checkBox = convertView.findViewById(R.id.check_box); icon = convertView.findViewById(R.id.iv_adapter_list_pic); name = convertView.findViewById(R.id.tv_goods_name); price = convertView.findViewById(R.id.tv_goods_price); type = convertView.findViewById(R.id.tv_type_size); num = convertView.findViewById(R.id.tv_num); reduce = convertView.findViewById(R.id.tv_reduce); add = convertView.findViewById(R.id.tv_add); name.setText(list.get(position).get( "name" )); price.setText( "¥ " + (Integer.valueOf(list.get(position).get( "price" ))) * (Integer.valueOf(list.get(position).get( "count" )))); type.setText(list.get(position).get( "type" )); num.setText(list.get(position).get( "count" )); if (pitchOnMap.get(list.get(position).get( "id" ))== 0 ){ checkBox.setChecked( false ); } else { checkBox.setChecked( true ); } checkBox.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (checkBox.isChecked()){ pitchOnMap.put(list.get(position).get( "id" ), 1 ); } else { pitchOnMap.put(list.get(position).get( "id" ), 0 ); } mrefreshPriceInterface.refreshPrice(pitchOnMap); } }); //商品数量减 reduce.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { if (Integer.valueOf(list.get(position).get( "count" )) <= 1 ) { Toast.makeText(context, "数量不能再减啦,只能删除!" , Toast.LENGTH_SHORT).show(); } else { list.get(position).put( "count" , (Integer.valueOf(list.get(position).get( "count" )) - 1 ) + "" ); notifyDataSetChanged(); } mrefreshPriceInterface.refreshPrice(pitchOnMap); } }); //商品数量加 add.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { list.get(position).put( "count" , (Integer.valueOf(list.get(position).get( "count" )) + 1 ) + "" ); notifyDataSetChanged(); mrefreshPriceInterface.refreshPrice(pitchOnMap); } }); return convertView; } /** * 创建接口 */ public interface RefreshPriceInterface { /** * 把价格展示到总价上 * @param pitchOnMap */ void refreshPrice(HashMap<String, Integer> pitchOnMap); } /** * 定义一个接口对象 */ private RefreshPriceInterface mrefreshPriceInterface; /** * 向外部暴露一个方法 * 把价格展示到总价上 * @param refreshPriceInterface */ public void setRefreshPriceInterface(RefreshPriceInterface refreshPriceInterface) { mrefreshPriceInterface = refreshPriceInterface; } } |
MainActivity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
public class MainActivity extends AppCompatActivity implements View.OnClickListener,CaetAdapter.RefreshPriceInterface{ private LinearLayout top_bar; private ListView listview; private CheckBox all_chekbox; private TextView price; private TextView delete; private TextView tv_go_to_pay; private List<User> goodsList; private UserDao userDao; private List<HashMap<String,String>> listmap= new ArrayList<>(); private CaetAdapter adapter; private double totalPrice = 0.00 ; private int totalCount = 0 ; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { top_bar = (LinearLayout) findViewById(R.id.top_bar); listview = (ListView) findViewById(R.id.listview); all_chekbox = (CheckBox) findViewById(R.id.all_chekbox); price = (TextView) findViewById(R.id.tv_total_price); delete = (TextView) findViewById(R.id.tv_delete); tv_go_to_pay = (TextView) findViewById(R.id.tv_go_to_pay); all_chekbox.setOnClickListener( this ); delete.setOnClickListener( this ); tv_go_to_pay.setOnClickListener( this ); initDate(); adapter = new CaetAdapter(MainActivity. this , listmap); listview.setAdapter(adapter); adapter.setRefreshPriceInterface( this ); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.all_chekbox: AllTheSelected(); break ; case R.id.tv_delete: checkDelete(adapter.getPitchOnMap()); break ; case R.id.tv_go_to_pay: if (totalCount<= 0 ){ Toast.makeText( this , "请选择要付款的商品~" ,Toast.LENGTH_SHORT).show(); } else { Toast.makeText( this , "付款成功" ,Toast.LENGTH_SHORT).show(); } break ; } } /** * 数据 */ private void initDate() { //创建集合 goodsList = new ArrayList<>(); //数据库 userDao = Myapplication.getInstances().getDaoSession().getUserDao(); userDao.deleteAll(); //数据源 for ( int i = 0 ; i < 10 ; i++) { //向数据库存放数据 User user = new User(( long ) i, "购物车里的第" + (i + 1 ) + "件商品" , (i + 20 ) + "码" , "10" , "10" ); userDao.insert(user); } //从数据库中把数据放到集合中 goodsList=userDao.loadAll(); //把结合中的数据放到HashMap集合中 for ( int i= 0 ;i<goodsList.size();i++){ HashMap<String,String> map= new HashMap<>(); map.put( "id" ,goodsList.get(i).getId()+ "" ); map.put( "name" ,goodsList.get(i).getName()); map.put( "type" ,(goodsList.get(i).getType())); map.put( "price" ,goodsList.get(i).getPrice()+ "" ); map.put( "count" ,goodsList.get(i).getCount()+ "" ); listmap.add(map); } } @Override public void refreshPrice(HashMap<String, Integer> pitchOnMap) { priceControl(pitchOnMap); } /** * 控制价格展示总价 */ private void priceControl(Map<String, Integer> pitchOnMap){ totalCount = 0 ; totalPrice = 0.00 ; for ( int i= 0 ;i<listmap.size();i++){ if (pitchOnMap.get(listmap.get(i).get( "id" ))== 1 ){ totalCount=totalCount+Integer.valueOf(listmap.get(i).get( "count" )); double goodsPrice=Integer.valueOf(listmap.get(i).get( "count" ))*Double.valueOf(listmap.get(i).get( "price" )); totalPrice=totalPrice+goodsPrice; } } price.setText( " ¥ " +totalPrice); tv_go_to_pay.setText( "付款(" +totalCount+ ")" ); } /** * 删除 控制价格展示总价 * @param map */ private void checkDelete(Map<String,Integer> map){ List<HashMap<String,String>> waitDeleteList= new ArrayList<>(); Map<String,Integer> waitDeleteMap = new HashMap<>(); for ( int i= 0 ;i<listmap.size();i++){ if (map.get(listmap.get(i).get( "id" ))== 1 ){ waitDeleteList.add(listmap.get(i)); waitDeleteMap.put(listmap.get(i).get( "id" ),map.get(listmap.get(i).get( "id" ))); } } listmap.removeAll(waitDeleteList); map.remove(waitDeleteMap); priceControl(map); adapter.notifyDataSetChanged(); } /** *全选或反选 */ private void AllTheSelected(){ HashMap<String,Integer> map=adapter.getPitchOnMap(); boolean isCheck= false ; boolean isUnCheck= false ; Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); if (Integer.valueOf(entry.getValue().toString())== 1 ){ isCheck= true ; } else { isUnCheck= true ; } } if (isCheck== true &&isUnCheck== false ){ //已经全选,做反选 for ( int i= 0 ;i<listmap.size();i++){ map.put(listmap.get(i).get( "id" ), 0 ); } all_chekbox.setChecked( false ); } else if (isCheck== true && isUnCheck== true ){ //部分选择,做全选 for ( int i= 0 ;i<listmap.size();i++){ map.put(listmap.get(i).get( "id" ), 1 ); } all_chekbox.setChecked( true ); } else if (isCheck== false && isUnCheck== true ){ //一个没选,做全选 for ( int i= 0 ;i<listmap.size();i++){ map.put(listmap.get(i).get( "id" ), 1 ); } all_chekbox.setChecked( true ); } priceControl(map); adapter.setPitchOnMap(map); adapter.notifyDataSetChanged(); } } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qpdb19981023/article/details/80848088