Listvie簡(jiǎn)單實(shí)現(xiàn)購(gòu)物車功能
本文實(shí)例為大家分享了Listvie簡(jiǎn)單實(shí)現(xiàn)購(gòu)物車的具體代碼,供大家參考,具體內(nèi)容如下
1.自定義view實(shí)現(xiàn)加減
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.適配器接口回調(diào)
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.調(diào)用
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()){//遍歷集合,有一個(gè)不選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("結(jié)算("+count+")"); priceText.setText("合計(jì):"+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(); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android Build類的詳解及簡(jiǎn)單實(shí)例
這篇文章主要介紹了Android Build類的詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,希望通過本文大家能夠理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-08-08Android實(shí)現(xiàn)使用流媒體播放遠(yuǎn)程mp3文件的方法
這篇文章主要介紹了Android實(shí)現(xiàn)使用流媒體播放遠(yuǎn)程mp3文件的方法,結(jié)合實(shí)例形式分析了Android遠(yuǎn)程播放音頻文件的相關(guān)步驟與實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-08-08android實(shí)現(xiàn)自動(dòng)發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)自動(dòng)發(fā)送郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Android頁面之間進(jìn)行數(shù)據(jù)回傳的方法分析
這篇文章主要介紹了Android頁面之間進(jìn)行數(shù)據(jù)回傳的方法,結(jié)合實(shí)例形式分析了Android頁面之間進(jìn)行數(shù)據(jù)的傳遞與處理技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06一分鐘實(shí)現(xiàn)Android遮罩引導(dǎo)視圖
本文通過一分鐘的時(shí)間教大家實(shí)現(xiàn)Android遮罩引導(dǎo)視圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03Input系統(tǒng)按鍵事件的分發(fā)處理示例詳解
這篇文章主要為大家介紹了Input系統(tǒng)按鍵事件的分發(fā)處理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01ASM的tree?api對(duì)匿名線程的hook操作詳解
這篇文章主要為大家介紹了ASM的tree?api對(duì)匿名線程的hook操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09