android listview中checkbox(購物車,批量操作)
阿新 • • 發佈:2019-01-31
最近在做購物車這裡。 在做全選的時候 總會出現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; } }