zoukankan      html  css  js  c++  java
  • Android 购物车的实现

    实现了购物车的全选 全不选  选中删除   选中状态下数量添加时总价随之添加等基本功能。









    实现代码逻辑

    import java.util.ArrayList;
    import java.util.List;
    
    import android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.SparseArray;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.BaseAdapter;
    import android.widget.CheckBox;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity implements OnClickListener
    {
    
    	private static final int INITIALIZE = 0;
    
    	private ListView mListView;// 列表
    
    	private ListAdapter mListAdapter;// adapter
    
    	private List<DataBean> mListData = new ArrayList<DataBean>();// 数据
    
    	private boolean isBatchModel;// 是否可删除模式
    
    	private RelativeLayout mBottonLayout;
    	private CheckBox mCheckAll; // 全选 全不选
    
    	private TextView mEdit; // 切换到删除模式
    
    	private TextView mPriceAll; // 商品总价
    
    	private TextView mSelectNum; // 选中数量
    
    	private TextView mFavorite; // 移到收藏夹
    
    	private TextView mDelete; // 删除 结算
    
    	private int totalPrice = 0; // 商品总价
    	/** 批量模式下,用来记录当前选中状态 */
    	private SparseArray<Boolean> mSelectState = new SparseArray<Boolean>();
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState)
    	{
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main_activity);
    
    		initView();
    		initListener();
    		loadData();
    	}
    
    	private void doDelete(List<Integer> ids)
    	{
    		for (int i = 0; i < mListData.size(); i++)
    		{
    			long dataId = mListData.get(i).getId();
    			for (int j = 0; j < ids.size(); j++)
    			{
    				int deleteId = ids.get(j);
    				if (dataId == deleteId)
    				{
    					mListData.remove(i);
    					i--;
    					ids.remove(j);
    					j--;
    				}
    			}
    		}
    
    		refreshListView();
    		mSelectState.clear();
    		totalPrice = 0;
    		mSelectNum.setText("已选" + 0 + "件商品");
    		mPriceAll.setText("¥" + 0.00 + "");
    		mCheckAll.setChecked(false);
    
    	}
    
    	private final List<Integer> getSelectedIds()
    	{
    		ArrayList<Integer> selectedIds = new ArrayList<Integer>();
    		for (int index = 0; index < mSelectState.size(); index++)
    		{
    			if (mSelectState.valueAt(index))
    			{
    				selectedIds.add(mSelectState.keyAt(index));
    			}
    		}
    		return selectedIds;
    	}
    
    	private void initView()
    	{
    
    		mBottonLayout = (RelativeLayout) findViewById(R.id.cart_rl_allprie_total);
    		mCheckAll = (CheckBox) findViewById(R.id.check_box);
    		mEdit = (TextView) findViewById(R.id.subtitle);
    		mPriceAll = (TextView) findViewById(R.id.tv_cart_total);
    		mSelectNum = (TextView) findViewById(R.id.tv_cart_select_num);
    		mFavorite = (TextView) findViewById(R.id.tv_cart_move_favorite);
    		mDelete = (TextView) findViewById(R.id.tv_cart_buy_or_del);
    		mListView = (ListView) findViewById(R.id.listview);
    		mListView.setSelector(R.drawable.list_selector);
    
    	}
    
    	private void initListener()
    	{
    		mEdit.setOnClickListener(this);
    		mDelete.setOnClickListener(this);
    		mCheckAll.setOnClickListener(this);
    
    	}
    
    	private void loadData()
    	{
    		new LoadDataTask().execute(new Params(INITIALIZE));
    	}
    
    	private void refreshListView()
    	{
    		if (mListAdapter == null)
    		{
    			mListAdapter = new ListAdapter();
    			mListView.setAdapter(mListAdapter);
    			mListView.setOnItemClickListener(mListAdapter);
    
    		} else
    		{
    			mListAdapter.notifyDataSetChanged();
    
    		}
    	}
    
    	private List<DataBean> getData()
    	{
    		int maxId = 0;
    		if (mListData != null && mListData.size() > 0)
    			maxId = mListData.get(mListData.size() - 1).getId();
    		List<DataBean> result = new ArrayList<DataBean>();
    		DataBean data = null;
    		for (int i = 0; i < 20; i++)
    		{
    			data = new DataBean();
    			data.setId(maxId + i + 1);// 从最大Id的下一个開始
    			data.setShopName("我的" + (maxId + 1 + i) + "店铺");
    			data.setContent("我的购物车里面的第" + (maxId + 1 + i) + "个商品");
    			data.setCarNum(1);
    			data.setPrice(305f);
    			result.add(data);
    		}
    		return result;
    	}
    
    	class Params
    	{
    		int op;
    
    		public Params(int op)
    		{
    			this.op = op;
    		}
    
    	}
    
    	class Result
    	{
    		int op;
    		List<DataBean> list;
    	}
    
    	private class LoadDataTask extends AsyncTask<Params, Void, Result>
    	{
    		@Override
    		protected Result doInBackground(Params... params)
    		{
    			Params p = params[0];
    			Result result = new Result();
    			result.op = p.op;
    			try
    			{// 模拟耗时
    				Thread.sleep(500L);
    			} catch (InterruptedException e)
    			{
    				e.printStackTrace();
    			}
    			result.list = getData();
    			return result;
    		}
    
    		@Override
    		protected void onPostExecute(Result result)
    		{
    			super.onPostExecute(result);
    			if (result.op == INITIALIZE)
    			{
    				mListData = result.list;
    			} else
    			{
    				mListData.addAll(result.list);
    				Toast.makeText(getApplicationContext(), "加入成功!", Toast.LENGTH_SHORT).show();
    			}
    
    			refreshListView();
    		}
    
    	}
    
    	private class ListAdapter extends BaseAdapter implements OnItemClickListener
    	{
    
    		@Override
    		public int getCount()
    		{
    			return mListData.size();
    		}
    
    		@Override
    		public Object getItem(int position)
    		{
    			return mListData.get(position);
    		}
    
    		@Override
    		public long getItemId(int position)
    		{
    			return position;
    		}
    
    		@Override
    		public View getView(final int position, View convertView, ViewGroup parent)
    		{
    			ViewHolder holder = null;
    			View view = convertView;
    			if (view == null)
    			{
    				view = LayoutInflater.from(MainActivity.this).inflate(R.layout.cart_list_item, null);
    				holder = new ViewHolder(view);
    				view.setTag(holder);
    			} else
    			{
    				holder = (ViewHolder) view.getTag();
    			}
    
    			DataBean data = mListData.get(position);
    			bindListItem(holder, data);
    			holder.add.setOnClickListener(new OnClickListener()
    			{
    
    				@Override
    				public void onClick(View v)
    				{
    					// TODO Auto-generated method stub
    
    					int _id = (int) mListData.get(position).getId();
    
    					boolean selected = mSelectState.get(_id, false);
    
    					mListData.get(position).setCarNum(mListData.get(position).getCarNum() + 1);
    
    					notifyDataSetChanged();
    
    					if (selected)
    					{
    						totalPrice += mListData.get(position).getPrice();
    						mPriceAll.setText("¥" + totalPrice + "");
    
    					}
    
    				}
    			});
    
    			holder.red.setOnClickListener(new OnClickListener()
    			{
    
    				@Override
    				public void onClick(View v)
    				{
    
    					// TODO Auto-generated method stub
    					if (mListData.get(position).getCarNum() == 1)
    						return;
    
    					int _id = (int) mListData.get(position).getId();
    
    					boolean selected = mSelectState.get(_id, false);
    					mListData.get(position).setCarNum(mListData.get(position).getCarNum() - 1);
    					notifyDataSetChanged();
    
    					if (selected)
    					{
    						totalPrice -= mListData.get(position).getPrice();
    						mPriceAll.setText("¥" + totalPrice + "");
    
    					} 
    
    				}
    			});
    			return view;
    		}
    
    		private void bindListItem(ViewHolder holder, DataBean data)
    		{
    
    			holder.shopName.setText(data.getShopName());
    			holder.content.setText(data.getContent());
    			holder.price.setText("¥" + data.getPrice());
    			holder.carNum.setText(data.carNum + "");
    			int _id = data.getId();
    
    			boolean selected = mSelectState.get(_id, false);
    			holder.checkBox.setChecked(selected);
    
    		}
    
    		@Override
    		public void onItemClick(AdapterView<?> parent, View view, int position, long id)
    		{
    			DataBean bean = mListData.get(position);
    
    			ViewHolder holder = (ViewHolder) view.getTag();
    			int _id = (int) bean.getId();
    
    			boolean selected = !mSelectState.get(_id, false);
    			holder.checkBox.toggle();
    			if (selected)
    			{
    				mSelectState.put(_id, true);
    				totalPrice += bean.getCarNum() * bean.getPrice();
    			} else
    			{
    				mSelectState.delete(_id);
    				totalPrice -= bean.getCarNum() * bean.getPrice();
    			}
    			mSelectNum.setText("已选" + mSelectState.size() + "件商品");
    			mPriceAll.setText("¥" + totalPrice + "");
    			if (mSelectState.size() == mListData.size())
    			{
    				mCheckAll.setChecked(true);
    			} else
    			{
    				mCheckAll.setChecked(false);
    			}
    
    		}
    
    	}
    
    	class ViewHolder
    	{
    		CheckBox checkBox;
    
    		ImageView image;
    		TextView shopName;
    		TextView content;
    		TextView carNum;
    		TextView price;
    		TextView add;
    		TextView red;
    
    		public ViewHolder(View view)
    		{
    			checkBox = (CheckBox) view.findViewById(R.id.check_box);
    			shopName = (TextView) view.findViewById(R.id.tv_source_name);
    			image = (ImageView) view.findViewById(R.id.iv_adapter_list_pic);
    			content = (TextView) view.findViewById(R.id.tv_intro);
    			carNum = (TextView) view.findViewById(R.id.tv_num);
    			price = (TextView) view.findViewById(R.id.tv_price);
    			add = (TextView) view.findViewById(R.id.tv_add);
    			red = (TextView) view.findViewById(R.id.tv_reduce);
    
    		}
    	}
    
    	@Override
    	public void onClick(View v)
    	{
    		// TODO Auto-generated method stub
    		switch (v.getId())
    		{
    
    		case R.id.subtitle:
    			isBatchModel = !isBatchModel;
    			if (isBatchModel)
    			{
    				mEdit.setText(getResources().getString(R.string.menu_enter));
    				mDelete.setText(getResources().getString(R.string.menu_del));
    				mBottonLayout.setVisibility(View.GONE);
    				mFavorite.setVisibility(View.VISIBLE);
    
    			} else
    			{
    				mEdit.setText(getResources().getString(R.string.menu_edit));
    
    				mFavorite.setVisibility(View.GONE);
    				mBottonLayout.setVisibility(View.VISIBLE);
    				mDelete.setText(getResources().getString(R.string.menu_sett));
    			}
    
    			break;
    
    		case R.id.check_box:
    			if (mCheckAll.isChecked())
    			{
    
    				totalPrice = 0;
    				if (mListData != null)
    				{
    					mSelectState.clear();
    					int size = mListData.size();
    					if (size == 0)
    					{
    						return;
    					}
    					for (int i = 0; i < size; i++)
    					{
    						int _id = (int) mListData.get(i).getId();
    						mSelectState.put(_id, true);
    						totalPrice += mListData.get(i).getCarNum() * mListData.get(i).getPrice();
    					}
    					refreshListView();
    					mPriceAll.setText("¥" + totalPrice + "");
    					mSelectNum.setText("已选" + mSelectState.size() + "件商品");
    
    				}
    			} else
    			{
    				if (mListAdapter != null)
    				{
    					totalPrice = 0;
    					mSelectState.clear();
    					refreshListView();
    					mPriceAll.setText("¥" + 0.00 + "");
    					mSelectNum.setText("已选" + 0 + "件商品");
    
    				}
    			}
    			break;
    
    		case R.id.tv_cart_buy_or_del:
    			if (isBatchModel)
    			{
    				List<Integer> ids = getSelectedIds();
    				doDelete(ids);
    			} else
    			{
    				Toast.makeText(getApplicationContext(), "结算", 0).show();
    			}
    
    			break;
    
    		default:
    			break;
    		}
    	}
    
    }
    


    源代码下载

  • 相关阅读:
    sql语句游标的写法
    oracle的安装与plsql的环境配置
    oracle中创建表时添加注释
    jsp中Java代码中怎么获取jsp页面元素
    sql模糊查询
    jQuery循环给某个ID赋值
    Codeforces Round #671 (Div. 2)
    TYVJ1935 导弹防御塔
    Educational Codeforces Round 95 (Rated for Div. 2)
    Codeforces Round #670 (Div. 2)
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6971880.html
Copyright © 2011-2022 走看看