购物车 全选逻辑

来源:互联网 发布:java object to date 编辑:程序博客网 时间:2024/06/10 09:43

购物车 全选逻辑

思路

  • 购物车的条目采用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;}@Overridepublic int getCount() {    // TODO Auto-generated method stub    return list.size();}@Overridepublic Object getItem(int position) {    // TODO Auto-generated method stub    return list.get(position);}@Overridepublic long getItemId(int position) {    // TODO Auto-generated method stub    return position;}@Overridepublic 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;}@Overridepublic int getCount() {    return list.size();}@Overridepublic Object getItem(int position) {    return list.get(position);}@Overridepublic long getItemId(int position) {    return position;}@Overridepublic 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;}

    }
    }

    `

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 褐色分泌物流了好几天了怎么办? 淘宝买的衣服一直不发货怎么办 从国外寄东西到国内被税了怎么办 百度网盘上传文件数量有限制怎么办 腾讯视频上传文件过限制大小怎么办 三星s7打网页又卡又慢怎么办 路由器的上网账号和口令忘了怎么办 小米笔记本移动热点连接不上怎么办 移动宽带密码重置后认证失败怎么办 移动光纤不记得账号和密码怎么办? 宽带为什么交了钱还是不能用怎么办 小孩被虎牙直播诱导支付了款怎么办 房间里4g网络信号差怎么办 移动4g网络信号不满格怎么办 大风号无法上传视频暂停服务怎么办 过了竞牌保证金交付时间怎么办 亚马逊产品上架后货物没到怎么办 工行企业网银证书过期了怎么办 海淘转运地址国家填错了怎么办 集装箱实重与申报重量不一样怎么办 微博复制的淘口令找不到了怎么办 买了移动手机不能用联通卡怎么办 移动手机用联通卡网速慢怎么办 移动手机插联通卡没反应怎么办 移动手机办了联通大王卡怎么办 qq被冻结但是有至尊宝怎么办 qq被冻结了有至尊宝怎么办 移动电话卡注销了里面的钱怎么办 罗麦的oa上经理喜报没截图怎么办 工行融e联登录密码忘了怎么办 融e借有额度秒拒怎么办 工行银行柜台办理融e借怎么办 地球末日生存破解版金币没了怎么办 手机被别人骗走了里面的微信怎么办 在微信里面被做微商的骗了钱怎么办 在qq上骗了人50怎么办 被3m多酶清洗液滴到皮肤怎么办 做3m赔了9万怎么办 在携程网上订的酒店发票怎么办 滴滴滴取消订单电话打不通怎么办 百度云容量2068g满了怎么办