Android Studio实现简单购物车功能

本文实例为大家分享了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

本文链接:https://my.lmcjl.com/post/7982.html

展开阅读全文

4 评论

留下您的评论.