关于购物车全选反选结算问题

来源:互联网 发布:世界营销网络地图 编辑:程序博客网 时间:2024/05/21 03:17

这里提供一下实现购物车全选,反选,结算的思路


为了解决ListView滑动时,checkBox不会错乱,写一个集合,装载checkBox状态

 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        view = inflater.inflate(R.layout.shopfragment, container, false);        //初始化事件        initView();        //从数据库查询数据        getData();        //根据商品个数判断加载的布局        if (dataList.size() == 0) {            //数据库中没有东西,显示空的界面            empty_linear.setVisibility(View.VISIBLE);            shopcart_have.setVisibility(View.GONE);        } else {            empty_linear.setVisibility(View.GONE);            shopcart_have.setVisibility(View.VISIBLE);        }        //加载数据,适配显示        initData();        //初始化事件        initEvent();        return view;    }    /**     * 初始化界面     */    private void initView() {        num = (TextView) view.findViewById(R.id.shopcart_num);        editor = (TextView) view.findViewById(R.id.shopcart_edit);        allCheck = (CheckBox) view.findViewById(R.id.allcheck_img);        total_price = (TextView) view.findViewById(R.id.total_tv);        total_btn = (Button) view.findViewById(R.id.total_btn);        listView = (ListView) view.findViewById(R.id.shopcart_lv);        empty_linear = (LinearLayout) view.findViewById(R.id.empty_linear);        shopcart_have = (LinearLayout) view.findViewById(R.id.shopcart_have);        btn_gyg = (Button) view.findViewById(R.id.btnshopping_gyg);    }    /**     * 数据库查询数据,并初始化集合     */    private void getData() {        ShopDao dao = new ShopDao(getContext());        dataList = dao.select();        for (int i = 0; i < dataList.size(); i++) {            statelist.add(false);//所有多选框初始状态是false,不勾选        }    }    /**     * 加载数据,适配显示     */    private void initData() {        //监听checkbox状态        //点中时改成相反的值        //结算,判断是否勾选,若勾选价格相加,否则,价格相减        //勾选,价格是string类型的,所以价格和数量相乘前,先把价格转成double类型        //保留两位小数        //如果ck全部勾选,则全选选中        //给控件设置值        adapter = new BaseAdapter() {            @Override            public int getCount() {                return dataList.size();            }            @Override            public Object getItem(int i) {                return dataList.get(i);            }            @Override            public long getItemId(int i) {                return i;            }            class ViewHolder {                ImageView img;                TextView title;                TextView price;                TextView num;                CheckBox ck;                RelativeLayout rl;            }            @Override            public View getView(final int i, View view, ViewGroup viewGroup) {                ViewHolder vh;                if (view == null) {                    vh = new ViewHolder();                    view = View.inflate(getActivity(), R.layout.shopcart_lv_item, null);                    vh.img = (ImageView) view.findViewById(R.id.shopcart_img);                    vh.title = (TextView) view.findViewById(R.id.shopcart_title);                    vh.price = (TextView) view.findViewById(R.id.shopcart_price);                    vh.num = (TextView) view.findViewById(R.id.shopcart_num);                    vh.rl = (RelativeLayout) view.findViewById(R.id.shopcart_item_rl);                    if (editor.getText().toString().equals("编辑")) {                        vh.rl.setVisibility(View.GONE);                    } else if (editor.getText().toString().equals("完成")) {                        vh.rl.setVisibility(View.VISIBLE);                        vh.num.setVisibility(View.GONE);                        statelist.set(i, false);                    }                    vh.ck = (CheckBox) view.findViewById(R.id.shopcart_checked);                    view.setTag(vh);                } else {                    vh = (ViewHolder) view.getTag();                }                vh.ck.setChecked(statelist.get(i));                //监听checkbox状态                vh.ck.setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View view) {                        //点中时改成相反的值                        statelist.set(i, !statelist.get(i));                        //结算,判断是否勾选,若勾选价格相加,否则,价格相减                        if (statelist.get(i)) {                            //勾选,价格是string类型的,所以价格和数量相乘前,先把价格转成double类型                            double price = Double.parseDouble(dataList.get(i).price);                            money += price * dataList.get(i).num;                        } else {                            double price = Double.parseDouble(dataList.get(i).price);                            money -= price * dataList.get(i).num;                        }                        total_price.setText("总价:¥" + df.format(money));//保留两位小数                        //如果ck全部勾选,则全选选中                        if (statelist.contains(false)) {                            allCheck.setChecked(false);                        } else {                            allCheck.setChecked(true);                        }                        notifyDataSetChanged();                    }                });                //给控件设置值                ImageLoader imageLoader = ImageLoader.getInstance();                imageLoader.displayImage(dataList.get(i).img, vh.img);                vh.title.setText(dataList.get(i).title);                vh.price.setText("¥" + dataList.get(i).price);                vh.num.setText("数量:" + dataList.get(i).num);                return view;            }        };        //把适配器封装起来,因为如果布局改变,需要重新适配数据,只是通知适配器不行,        // 只有改变数据时,通知适配器才有用,这里主要是方便后面编辑布局改变时的用到的        listView.setAdapter(adapter);    }    /**     * 初始化事件     */    private void initEvent() {        //监听全选        allCheck.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                boolean flag = allCheck.isChecked();                money = 0;                for (int i = 0; i < statelist.size(); i++) {                    statelist.set(i, flag);                    if (allCheck.isChecked()) {                        //全选,结算                        double price = Double.parseDouble(dataList.get(i).price);                        money += price * dataList.get(i).num;                    } else {                        money = 0;                    }                }                adapter.notifyDataSetChanged();                total_price.setText("总价:¥" + df.format(money));            }        });        //编辑        editor.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                if (editor.getText().toString().equals("编辑")) {                    editor.setText("完成");                    total_price.setVisibility(View.GONE);                    total_btn.setText("删除");                    money = 0;                    total_price.setText("总价:¥0.00");                    allCheck.setChecked(false);                } else if (editor.getText().toString().equals("完成")) {                    editor.setText("编辑");                    total_price.setVisibility(View.VISIBLE);                    total_btn.setText("结算");                }                initData();            }        });        total_btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                totalPrice();            }        });    }    //结算    private void totalPrice() {        if (total_btn.getText().toString().equals("结算")) {            if (!statelist.contains(true)) {                Toast.makeText(getContext(), "您还没有选中任何商品哦!", Toast.LENGTH_SHORT).show();            } else {    <span style="white-space:pre"></span>//结算跳转到支付宝,在这里先不做            }        } else if (total_btn.getText().toString().equals("删除")) {            if (!statelist.contains(true)) {                Toast.makeText(getContext(), "未选中任何商品删除", Toast.LENGTH_SHORT).show();            } else {                AlertDialog.Builder builder = new AlertDialog.Builder(getContext());                builder.setView(View.inflate(getContext(), R.layout.delete_pop, null));                builder.setPositiveButton("删除", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialogInterface, int ii) {                        ShopDao dao = new ShopDao(getContext());                        //根据状态集合,判断哪个是要删除的                        for (int i = 0; i < statelist.size(); i++) {                            if (statelist.get(i)) {                                String title = dataList.get(i).title;                                dao.delete(title);//从数据库中删除                            }                        }                        //清空集合                        dataList.clear();                        statelist.clear();                        //重新添加                        dataList.addAll(dao.select());                        //状态集合也要改变长度和状态                        for (int i = 0; i < dataList.size(); i++) {                            statelist.add(false);                        }                        //通知适配器                        adapter.notifyDataSetChanged();                    }                });                builder.setNegativeButton("取消", null);                AlertDialog dialog = builder.create();                dialog.show();            }        }    }

//数据库

public class MyOpenHelper extends SQLiteOpenHelper {    public MyOpenHelper(Context context) {        super(context, "yi.db", null, 1);    }    @Override    public void onCreate(SQLiteDatabase sqLiteDatabase) {        //建表        sqLiteDatabase.execSQL("create table shopcart(id integer primary key autoincrement,img varchar(20),title varchar(20),price varchar(20),num int(11))");    }    @Override    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {        //数据库升级    }}
//dao

public class ShopDao {    private final MyOpenHelper myOpenHelper;    private final SQLiteDatabase datas;    public ShopDao(Context context){        myOpenHelper = new MyOpenHelper(context);        datas = myOpenHelper.getWritableDatabase();    }    //添加    public void addData(DetailBean.Data.Goods goods,String title,int i){        ContentValues values=new ContentValues();        values.put("img",goods.gallery.get(0).normal_url);        values.put("title",title);        values.put("price",goods.shop_price);        values.put("num",i);        datas.insert("shopcart",null,values);    }    //查询    public List<ShopcartBean> select(){        Cursor cursor = datas.query(false, "shopcart", null, null, null ,null, null, null, null);        //创建集合        List<ShopcartBean> list=new ArrayList<ShopcartBean>();        while(cursor.moveToNext()){            String img = cursor.getString(cursor.getColumnIndex("img"));            String title = cursor.getString(cursor.getColumnIndex("title"));            String price = cursor.getString(cursor.getColumnIndex("price"));            int num = cursor.getInt(cursor.getColumnIndex("num"));            ShopcartBean bean=new ShopcartBean(img,title,price,num);            list.add(bean);        }        //关闭游标        closeCourse(cursor);        return list;    }    //删除    public void delete(String title){       datas.delete("shopcart","title=?",new String[]{title});    }    //关闭数据库    public void closeData()    {        if(datas!=null&&datas.isOpen())        {            datas.close();        }    }    //关闭游标    public void closeCourse(Cursor cursor)    {        if(!cursor.isClosed())        {            cursor.close();        }    }}


实现效果如下

//反选代码部分,主要提供思路

reverse.setOnClickListener(new OnClickListener() {@Overridepublic 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();}}});}




点击保存到购物车,数据存到数据库,购物车界面的数据展示是从数据库中查询出来展示的,所以删也要从数据库中删除,重新适配一下


以上只是提供了一些思路,具体到项目中还要随机应变,上述代码可以实现全选反选

0 0
原创粉丝点击