1. 程式人生 > >android listview中checkbox(購物車,批量操作)

android listview中checkbox(購物車,批量操作)

最近在做購物車這裡。 在做全選的時候 總會出現getchillat()空指標的問題,所以放棄了。

後來參考了網上的一些例子。

至於加入之後就可以看下面

check_goods_all和delete中的程式碼吧

這兩個函式的最後都重新設定了介面卡 因為我在呼叫cartAdapter.notifyDataSetChanged()的時候沒有變化,具體也不太清楚。但是卻是好用。

因為某些原因不能提供整個專案原始碼。

public class Shopping_cart_listActivity extends Activity {

	private Intent intent;

	private ListView listView;
	private ArrayList<HashMap<String, Object>> listItem;
	// private SimpleAdapter listAdapter;
	private CartAdapter cartAdapter;

	private CheckBox check_goods_all;

	String[] goods_name = { "奶粉", "奶粉", "奶粉", "奶粉", "奶粉", "奶粉", "奶粉", "奶粉" };
	int[] goods_number = { 1, 2, 3, 4, 5, 6, 7, 8 };
	double[] goods_price = { 668.00, 668.00, 668.00, 668.00, 668.00, 668.00,
			668.00, 668.00 };

	public void init() {
		intent = new Intent();
		listView = (ListView) findViewById(R.id.ListView_shopping_cart_list);

		check_goods_all = (CheckBox) findViewById(R.id.check_goods_all);
		check_goods_all.setChecked(false);

		// listAdapter = new SimpleAdapter(this, getData(),
		cartAdapter = new CartAdapter(getData(), this.getApplicationContext());
		listView.setAdapter(cartAdapter);

	}

	public ArrayList<HashMap<String, Object>> getData() {
		listItem = new ArrayList<HashMap<String, Object>>();
		for (int i = 0; i < 8; i++) {
			HashMap<String, Object> map = new HashMap<String, Object>();
			map.put("goods_info", goods_name[i]);
			map.put("shopping_cart_each_count", goods_number[i]);
			map.put("shopping_cart_each_price", goods_price[i]);
			// map.put("check_goods", false);
			listItem.add(map);
		}
		return listItem;
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_shopping_cart_list);
		init();

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_shopping_cart_list1, menu);
		return true;
	}

	public void check_goods_all(View v) {

		/*
		 * for (int i = 0; i < listView.getCount(); i++) {
		 * cartAdapter.getIsSelected().put(i, check_goods_all.isChecked()); }
		 */

		for (int i = 0; i < cartAdapter.getCount(); i++) {
			cartAdapter.isSelected.set(i, check_goods_all.isChecked());
		}
		listView.setAdapter(cartAdapter);
	}

	public void delete(View v) {

		int num = cartAdapter.isSelected.size();

		ArrayList<Boolean> temp_isSelected = new ArrayList<Boolean>();
		ArrayList<HashMap<String, Object>> temp_listItem = new ArrayList<HashMap<String,Object>>();

		int j = 0;
		for (int i = 0; i < num; i++) {
			if (!cartAdapter.isSelected.get(i)) {
				temp_isSelected.add(j, false);
				temp_listItem.add(j++, cartAdapter.list.get(i));
			}
		}
		cartAdapter.setIsSelected(temp_isSelected);
		cartAdapter.setList(temp_listItem);
		listView.setAdapter(cartAdapter);
		System.out.println("介面卡中剩餘:" + listItem.size());
		/*
		 * for (int i = 0; i < listView.getCount(); i++) { RelativeLayout ll =
		 * (RelativeLayout) listView.getChildAt(i);// 獲得子級 CheckBox chkone =
		 * (CheckBox) ll.findViewById(R.id.check_goods);// 從子級中獲得控制元件 if
		 * (chkone.isChecked()) { System.out.println(i + "------->");
		 * listItem.remove(i); listAdapter.notifyDataSetChanged(); } }
		 */

	}

	public void return_to_before(View v) {
		intent.setClass(Shopping_cart_listActivity.this, FrameActivity.class);
		startActivity(intent);
		finish();
	}

	public void settle(View v) {
		intent.setClass(Shopping_cart_listActivity.this,
				BrandRankGoodsInfoActivity.class);
		startActivity(intent);
		finish();
	}

	class CartAdapter extends BaseAdapter {

		// 儲存listview item的狀態
		HashMap<Integer, View> map = new HashMap<Integer, View>();
		// 填充資料的list
		private ArrayList<HashMap<String, Object>> list;
		// 用來控制CheckBox的選中狀況
		private ArrayList<Boolean> isSelected;
		// 上下文
		private Context context;
		// 用來匯入佈局
		private LayoutInflater inflater = null;

		// 構造器
		public CartAdapter(ArrayList<HashMap<String, Object>> list,
				Context context) {
			this.context = context;
			this.list = list;
			isSelected = new ArrayList<Boolean>();
			// 初始化資料
			initDate();
		}

		// 初始化isSelected的資料
		private void initDate() {
			for (int i = 0; i < list.size(); i++) {
				isSelected.add(i, false);
			}
		}

		@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;
		}

		@SuppressWarnings("unused")
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			View view;
			ViewHolder holder = null;
			if (map.get(position) == null) {
				// 獲得ViewHolder物件
				// 匯入佈局並賦值給convertview
				LayoutInflater mInflater = (LayoutInflater) context
						.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
				view = mInflater.inflate(R.layout.listview_shopping_cart, null);
				holder = new ViewHolder();
				holder.check_goods = (CheckBox) view
						.findViewById(R.id.check_goods);
				holder.shopping_cart_each_count = (EditText) view
						.findViewById(R.id.shopping_cart_each_count);
				holder.shopping_cart_each_price = (TextView) view
						.findViewById(R.id.shopping_cart_each_price);
				holder.goods_info = (TextView) view
						.findViewById(R.id.goods_info);
				final int p = position;
				// 為view設定標籤
				// final boolean ischecked = holder.check_goods.isChecked();
				holder.check_goods.setOnClickListener(new OnClickListener() {
					@Override
					public void onClick(View v) {
						// TODO Auto-generated method stub
						CheckBox cb = (CheckBox) v;
						isSelected.set(p, cb.isChecked());
						/*
						 * holder.check_goods.toggle(); isSelected.put(position,
						 * holder.check_goods.isChecked());
						 */

					}
				});
				view.setTag(holder);
			} else {
				// 取出holder
				view = map.get(position);
				holder = (ViewHolder) view.getTag();
			}

			// 設定list中TextView的顯示
			holder.goods_info.setText((String) list.get(position).get(
					"goods_info"));
			holder.shopping_cart_each_price.setText(((Double) list
					.get(position).get("shopping_cart_each_price")).toString());
			holder.shopping_cart_each_count.setText(((Integer) list.get(
					position).get("shopping_cart_each_count")).toString());
			// 根據isSelected來設定checkbox的選中狀況
			holder.check_goods.setChecked(isSelected.get(position));
			return view;

		}

		public void setList(ArrayList<HashMap<String, Object>> list) {
			this.list = list;
		}
		
		public ArrayList<HashMap<String, Object>> getList() {
			return list;
		}

		public ArrayList<Boolean> getIsSelected() {
			return isSelected;
		}

		public void setIsSelected(ArrayList<Boolean> isSelected) {
			this.isSelected = isSelected;
		}
	}

	class ViewHolder {
		public RelativeLayout linerlayout_shopping_cart;
		public ListView ListView_shopping_cart_list;
		public Button shopping_cart_reduce;
		public Button shopping_cart_add;

		public EditText shopping_cart_each_count;
		public TextView shopping_cart_each_price;
		public TextView goods_info;
		public CheckBox check_goods;
	}

}