购物车 全选逻辑
思路
- 购物车的条目采用listview 展示
- listview 条目中 checkbox 控件,该控件默认为未选中 isChecked(false);
- listview外部点击全选按钮点击后,listview 内部数据如果是未选中状态改为选中状态;再次点击则全部变为 为选中状态
- listview 中checkbox 状态与 外部的全选 checkbox 的状态相同,则考虑 将 外部全选的状态赋予 listview checkbox 状态
- 更新完数据后,进行刷新
- 方式一
- adapter.notifyDataSetChanged();
- 方式二 重写设置适配器 ,适配器单独写,提升为全局变量,可以保证设置的适配器均为同一个引用
- listview.setAdapter(adapter);
- 方式一
注意事项
- 采用方式一 ,更新数据,有时数据已经刷新,但是界面没有更新,所有采用第二种方式更靠谱。
参考代码
代码一
`public class MainActivity extends Activity {
private ListView list_view;
private CheckAdapter checkAdapter;
private CheckBox allBox;
private Button reverse;@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);list_view = (ListView)findViewById(R.id.list_view); allBox = (CheckBox)findViewById(R.id.all); reverse = (Button)findViewById(R.id.reverse); List<String> list = new ArrayList<String>(); for (int i = 0; i < 15; i++) { list.add("这是条目" + i); } checkAdapter = new CheckAdapter(getApplicationContext(), list); list_view.setAdapter(checkAdapter); //设置全选 allBox.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { boolean flag = allBox.isChecked(); for (int i = 0; i < checkAdapter.getSelect().size(); i++) { checkAdapter.getSelect().set(i, flag); } checkAdapter.notifyDataSetChanged(); } }); //反选 reverse.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (! checkAdapter.getSelect().contains(true)) { Toast.makeText(MainActivity.this, "qingxuanz", 0).show(); }else { for (int i = 0; i < checkAdapter.getSelect().size(); i++) { if (checkAdapter.getSelect().get(i)) { checkAdapter.getSelect().set(i, false); }else { checkAdapter.getSelect().set(i, true); } } if (checkAdapter.getSelect().contains(false)) { allBox.setChecked(false); } checkAdapter.notifyDataSetChanged(); } } });
}
private class CheckAdapter extends BaseAdapter {
private List list;
private Context context;//创建一个集合 去记录选中与未选中的状态 LinkedList<Boolean> linkedList = new LinkedList<Boolean>(); public CheckAdapter(Context context, List<String> list) { // TODO Auto-generated constructor stub this.list = list; this.context = context; for (int i = 0; i < list.size(); i++) { linkedList.add(false); } } //对外提供一个方法 获取这个集合 private List<Boolean> getSelect() { return linkedList; } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return list.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = View.inflate(context, R.layout.item, null); } CheckBox ck = (CheckBox) convertView.findViewById(R.id.ck); TextView tView = (TextView) convertView.findViewById(R.id.tv); tView.setText(list.get(position)); ck.setChecked(linkedList.get(position)); //对checkBox点击进行监听 ck.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //点中的时候改成相反的值 linkedList.set(position, ! linkedList.get(position)); //点击的同时还要去判断全选 if (linkedList.contains(false)) { allBox.setChecked(false); }else { allBox.setChecked(true); } notifyDataSetChanged(); } }); return convertView; }
}
}
`代码二
`
public class Fragment3_Shopping extends Fragment implements View.OnClickListener {private Activity mactivity;
private View view;
private ListView lv_shopping;
private MyDatabase mydb;
private List list;
private CheckBox cbox_shopping;
private ImageView iv_shoping;
private TextView tv_listitem_name;
private TextView tv_listitem_price;
private TextView tv_listitem_num;
private LinearLayout ll_listitem_pics;
private LinearLayout.LayoutParams params;
private String tag = “Fragment3_Shopping”;
private ShoppingAdapter adapter;
private CheckBox cbox_all;
private TextView tv_totalprice;
private TextView btn_account;@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_fragment3__shopping, container, false);
mactivity = getActivity();//获取数据库对象
mydb = new MyDatabase(mactivity);
return view;
}@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initView();//初始化控件
initData();//初始化数据
}private void initData() {
list = new ArrayList();
SQLiteDatabase db = mydb.getWritableDatabase();Cursor cursor = db.query("shopping", null, null, null, null, null, null); ShoppingBean shoppingBean = null; while (cursor.moveToNext()) { shoppingBean = new ShoppingBean(); shoppingBean.id = cursor.getInt(cursor.getColumnIndex("_id")); shoppingBean.goods_name = cursor.getString(cursor.getColumnIndex("goods_name")); shoppingBean.shop_price = cursor.getInt(cursor.getColumnIndex("shop_price")); shoppingBean.numShow = cursor.getInt(cursor.getColumnIndex("numShow")); shoppingBean.goodsimg = cursor.getString(cursor.getColumnIndex("goods_img")); shoppingBean.is_activity_goods = cursor.getString(cursor.getColumnIndex("is_activity_goods")); shoppingBean.is_allow_credit = cursor.getString(cursor.getColumnIndex("is_allow_credit")); shoppingBean.url = cursor.getString(cursor.getColumnIndex("url")); list.add(shoppingBean); } Log.e(tag, list.toString()); adapter = new ShoppingAdapter(list); lv_shopping.setAdapter(adapter);
}
private void initView() {
lv_shopping = (ListView) view.findViewById(R.id.lv_shopping);
cbox_all = (CheckBox) view.findViewById(R.id.cbox_all_shopping);
tv_totalprice = (TextView) view.findViewById(R.id.tv_totalprice_shopping);
btn_account = (TextView) view.findViewById(R.id.btn_account_shopping);
cbox_all.setOnClickListener(this);
}@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.cbox_all_shopping://全选,要么全true,要么全false
Log.i(“–”, “cbox_all—” + cbox_all.isChecked());
boolean flag = cbox_all.isChecked();for (int i = 0; i < adapter.getList().size(); i++) { adapter.getList().set(i, flag); } lv_shopping.setAdapter(adapter); //-----------------每次点击为0 tv_totalprice.setText("¥" + adapter.getTotalprice()); break; default: break; }
}
class ShoppingAdapter extends BaseAdapter {//设置适配器
List<ShoppingBean> list; private LinkedList<Boolean> linkedList = new LinkedList<Boolean>(); public ShoppingAdapter(List<ShoppingBean> list) { this.list = list; for (int i = 0; i < list.size(); i++) { linkedList.add(false); } } private List<Boolean> getList() { return linkedList; } private double getTotalprice() { double totalprice = 0; for (int i = 0; i < linkedList.size(); i++) { ShoppingBean shoppingBean = list.get(i); if (linkedList.get(i)) { totalprice += shoppingBean.shop_price * shoppingBean.numShow; } } return totalprice; } @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; } @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = View.inflate(mactivity, R.layout.listitem_shopping, null); cbox_shopping = (CheckBox) convertView.findViewById(R.id.cbox_shopping); iv_shoping = (ImageView) convertView.findViewById(R.id.iv_shoping); tv_listitem_name = (TextView) convertView.findViewById(R.id.tv_listitem_name); tv_listitem_price = (TextView) convertView.findViewById(R.id.tv_listitem_price); tv_listitem_num = (TextView) convertView.findViewById(R.id.tv_listitem_num); ll_listitem_pics = (LinearLayout) convertView.findViewById(R.id.ll_listitem_pics); } //处理点击事件 判断如果外部选择,则 cbox_shopping.setChecked(linkedList.get(position)); ShoppingBean shoppingBean = list.get(position); BitmapUtils bit = new BitmapUtils(mactivity); bit.display(iv_shoping, shoppingBean.goodsimg);//商品图片 tv_listitem_name.setText(shoppingBean.goods_name);//商品名称 tv_listitem_price.setText("¥" + shoppingBean.shop_price); tv_listitem_num.setText("数量:" + shoppingBean.numShow); String is_allow_credit = shoppingBean.is_allow_credit; String is_activity_goods = shoppingBean.is_activity_goods; //--------------------- cbox_shopping.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { linkedList.set(position, !linkedList.get(position));//点击取反 //如果全选,则全选按钮选择 if (linkedList.contains(false)) { cbox_all.setChecked(false); } else { cbox_all.setChecked(true); } notifyDataSetChanged(); tv_totalprice.setText("¥" + getTotalprice()); } }); if (ll_listitem_pics.getChildCount() > 0) { ll_listitem_pics.removeAllViews(); } if (is_activity_goods.equals("0")) { ImageView img1 = new ImageView(mactivity); params = new LinearLayout.LayoutParams(20, 20); params.leftMargin = 10; img1.setLayoutParams(params); img1.setBackgroundResource(R.drawable.coupons); ll_listitem_pics.addView(img1); } if (is_allow_credit.equals("True")) { ImageView img1 = new ImageView(mactivity); params = new LinearLayout.LayoutParams(20, 20); params.leftMargin = 10; img1.setLayoutParams(params); img1.setBackgroundResource(R.drawable.pledge); ll_listitem_pics.addView(img1); } return convertView; }
}
}`