本文实例为大家分享了listview简单实现购物车的具体代码,供大家参考,具体内容如下
1.自定义view实现加减
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
|
public class MyView extends LinearLayout implements View.OnClickListener { private OnAmountChangeListener mListener; private int count; private TextView numText; public MyView(Context context) { this (context, null ); } public MyView(Context context, @Nullable AttributeSet attrs) { this (context, attrs, 0 ); } public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super (context, attrs, defStyleAttr); View view = View.inflate(context, R.layout.add, this ); initView(view); } public void setText( int num){ numText.setText( "" +num); } public int getText(){ getTextString(); return count; } private void initView(View view) { Button addBtn = view.findViewById(R.id.btn_add); Button jianBtn = view.findViewById(R.id.btn_jian); numText = view.findViewById(R.id.txt_num); getTextString(); addBtn.setOnClickListener( this ); jianBtn.setOnClickListener( this ); } public void setOnclickNum(OnAmountChangeListener mListener){ this .mListener = mListener; } @Override public void onClick(View view) { getTextString(); switch (view.getId()){ case R.id.btn_add: count++; break ; case R.id.btn_jian: if (count> 0 ){ count--; } break ; } numText.setText( "" +count); if (mListener!= null ) { mListener.onAmountChange(view, count); } } public void getTextString() { String numStr = numText.getText().toString().trim(); count = Integer.parseInt(numStr); } public interface OnAmountChangeListener { void onAmountChange(View view, int amount); } } |
2.适配器接口回调
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
|
public class MyAdapter extends BaseAdapter { private List<Text> mList; private Context context ; private GaroupClick garoupClick; private int index; private CountClick countClick; public MyAdapter(Context context) { this .context = context; } @Override public int getCount() { return mList.size(); } public void setData(List<Text> mList){ this .mList = mList; notifyDataSetChanged(); } @Override public Object getItem( int i) { return mList.get(i); } @Override public long getItemId( int i) { return i; } public void setOnCountClick(CountClick click){ this .countClick = click; } public void setOnGroupclick(GaroupClick groupclick){ this .garoupClick = groupclick; } @Override public View getView( final int i, View view, ViewGroup viewGroup) { final ViewHolder holder ; if (view== null ){ holder = new ViewHolder(); view = View.inflate(context, R.layout.item, null ); holder.childCheck = view.findViewById(R.id.cb_chid_checked); holder.txtPrice = view.findViewById(R.id.txt_price); holder.myView = view.findViewById(R.id.myview); view.setTag(holder); } else { holder = (ViewHolder)view.getTag(); } final Text text = mList. get(i); holder.childCheck.setChecked(text.isChoose()); holder.txtPrice.setText( "" +text.getPrice()); holder.myView.setText(text.getCount()); holder.myView.setOnclickNum( new MyView.OnAmountChangeListener() { @Override public void onAmountChange(View view, int amount) { text.setCount(amount); } }); boolean checked = holder.childCheck.isChecked(); if (checked){ holder.myView.setOnclickNum( new MyView.OnAmountChangeListener() { @Override public void onAmountChange(View view, int amount) { if (countClick!= null ){ countClick.onNumClick(i,amount); } } }); } holder.childCheck.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { text.setChoose(((CheckBox)view).isChecked()); if (garoupClick!= null ){ garoupClick.onItemClick(i,((CheckBox)view).isChecked()); } } }); return view; } class ViewHolder{ CheckBox childCheck; TextView txtPrice; MyView myView; } public interface GaroupClick{ void onItemClick( int position, boolean isChoose); } public interface CountClick{ void onNumClick( int position, int count); } } |
3.调用
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
|
public class MainActivity extends AppCompatActivity implements MyAdapter.GaroupClick, MyAdapter.CountClick { private Button jiesuanBtn; private ListView mListView; private CheckBox allCheck; private TextView priceText; private List<Text> mList = new ArrayList<>(); private int numPrice = 0 ; private int count = 0 ; private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); } private void initData() { for ( int i = 0 ; i < 30 ; i++) { Text txt = new Text(); txt.setPrice( 20 ); txt.setCount( 1 ); mList.add(txt); } adapter = new MyAdapter( this ); adapter.setData(mList); mListView.setAdapter(adapter); adapter.setOnGroupclick( this ); adapter.setOnCountClick( this ); } public boolean isAllChecked(){ for (Text text : mList) { if (!text.isChoose()){ //遍历集合,有一个不选return false return false ; } } return true ; } private void initView() { jiesuanBtn = (Button) findViewById(R.id.btn_num); mListView = (ListView) findViewById(R.id.listview); allCheck = (CheckBox) findViewById(R.id.cb_all_checked); priceText = (TextView) findViewById(R.id.txt_price_sum); allCheck.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { if (mList.size()!= 0 ) { if (allCheck.isChecked()) { for ( int i = 0 ; i < mList.size(); i++) { mList.get(i).setChoose( true ); adapter.notifyDataSetChanged(); } } else { for ( int i = 0 ; i < mList.size(); i++) { mList.get(i).setChoose( false ); adapter.notifyDataSetChanged(); } } upDate(); } } }); jiesuanBtn.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity. this , PayDemoActivity. class ); startActivity(intent); } }); } private void upDate() { numPrice = 0 ; count = 0 ; for ( int i = 0 ; i < mList.size(); i++) { Text text = mList.get(i); if (text.isChoose()){ count++; numPrice += text.getPrice()*text.getCount(); } } jiesuanBtn.setText( "结算(" +count+ ")" ); priceText.setText( "合计:" +numPrice); } @Override public void onItemClick( int position, boolean isChoose) { mList.get(position).setChoose(isChoose); if (isAllChecked()){ allCheck.setChecked( true ); } else { allCheck.setChecked( false ); } adapter.notifyDataSetChanged(); upDate(); } @Override public void onNumClick( int position, int count) { mList.get(position).setCount(count); adapter.notifyDataSetChanged(); upDate(); } } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/xiaoxiaoluc/article/details/76169862