关于购物车全选反选结算问题
来源:互联网 发布:世界营销网络地图 编辑:程序博客网 时间: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
- 关于购物车全选反选结算问题
- 购物车全选,反选,结算
- 购物车全选反选
- android全选反选结算
- Android仿京东App购物车 二级列表+全选反选+Ok封装+拦截器+结算+商品数量计算
- 全选与反选_购物车
- 购物车必备全选反选
- 购物车的全选和反选
- 购物车,全选,反选,删除,添加
- angularjs购物车全选反选
- 实现购物车结算功能:批量和全部删除,全选和反选,单价和总价,数量增减,页面隐藏和显示
- 关于checked全选与反选问题
- android_购物车增删改查,结算,全选全不选
- 购物车全选+单选+反选简单逻辑实现
- 类购物车的全选反选效果
- RecyclerView实现购物车的全选、反选功能
- 简单购物车Demo_全选+反选+商品计价
- Android Studio 购物车,二级目录,全选反选,计数
- linux添加exFat支持
- 解决 Android N 7.0 上 报错:android.os.FileUriExposedException
- 搭建Android开发环境
- lua基本函数库
- Graphite简要教程
- 关于购物车全选反选结算问题
- stm32 unique device id (UDID)
- Shader 中常用到的一些内置方法,来自HLSL API
- linux 各发行版本查询命令
- CSS知识回顾
- [转]TensorFlow安装问题
- Activity ConfigChanges属性
- java.sql.SQLException: Before start of result set
- 如何从当前activity再次进入当前activity