android二级列表购物车
2017-11-21 10:36
471 查看
一.导入EventBus的依赖 compile 'org.greenrobot:eventbus:3.1.1' eventBus必须注册 EventBus.getDefault().register(this); 必销毁 //销毁方法 @Override protected void onDestroy() { super.onDestroy(); //eventBus销毁 EventBus.getDefault().unregister(this); }
二.级列表的适配器
public class ExlvAdapter extends BaseExpandableListAdapter { private static final String TAG = "ExlvAdapter"; private Context context; private List<CarBean.DataBean> groupList; private List<List<CarBean.DataBean.ListBean>> childList; private boolean allGroupCbSelect; public ExlvAdapter(Context context, List<CarBean.DataBean> groupList, List<List<CarBean.DataBean.ListBean>> childList) { this.context = context; this.groupList = groupList; this.childList = childList; } @Override public int getGroupCount() { return groupList.size(); } @Override public int getChildrenCount(int i) { return childList.get(i).size(); } @Override public Object getGroup(int i) { return groupList.get(i); } @Override public Object getChild(int i, int i1) { return childList.get(i).get(i1); } @Override public long getGroupId(int i) { return i; } @Override public long getChildId(int i, int i1) { return i1; } @Override public boolean hasStableIds() { return false; } //一级列表布局 @Override public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) { final CarBean.DataBean dataBean = groupList.get(i); final ViewHolder holder; if (view == null) { holder = new ViewHolder(); view = View.inflate(context, R.layout.exlv_item, null); holder.textView = (TextView) view.findViewById(R.id.g_title); holder.che = (CheckBox) view.findViewById(R.id.che); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } holder.textView.setText(dataBean.getSellerName()); //设置一级列表checkBox的状态 holder.che.setChecked(dataBean.isChecked()); //一级列表checkBox的点击事件 holder.che.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //判断一级列表复选框的状态 设置为true或false dataBean.setChecked(holder.che.isChecked()); //改变二级checkbod的状态 changeChildCbState(i, holder.che.isChecked()); //算钱 EventBus.getDefault().post(computer()); //改变全选状态 isAllGroupCbSelect判断一级是否全部选中 changeAllCbState(isAllGroupCbSelect()); //必刷新 notifyDataSetChanged(); } }); return view; } //二级列表布局 @Override public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) { final CarBean.DataBean.ListBean listBean = childList.get(i).get(i1); final ViewHolder2 holder2; if (view == null) { holder2 = new ViewHolder2(); view = View.inflate(context, R.layout.exlv_item2, null); holder2.z_title = (TextView) view.findViewById(R.id.z_title); holder2.z_che = (CheckBox) view.findViewById(R.id.z_che); holder2.img = (ImageView) view.findViewById(R.id.z_img); holder2.price = view.findViewById(R.id.z_price); holder2.xiangqing = view.findViewById(R.id.z_shuxing); holder2.jian = view.findViewById(R.id.iv_jian); holder2.jia = view.findViewById(R.id.iv_add); holder2.del = view.findViewById(R.id.del); holder2.num = view.findViewById(R.id.tv_num); view.setTag(holder2); } else { holder2 = (ViewHolder2) view.getTag(); } holder2.num.setText(listBean.getNum() + ""); holder2.z_title.setText(listBean.getTitle()); holder2.price.setText("¥" + listBean.getPrice()); holder2.xiangqing.setText(listBean.getSubhead()); //设置二级列表checkbox的属性 holder2.z_che.setChecked(listBean.isChecked()); String images = listBean.getImages(); String[] split = images.split("\\|"); Glide.with(context).load(split[0]).into(holder2.img); //二级列表的点击事件 holder2.z_che.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //设置该条目中的checkbox属性值 listBean.setChecked(holder2.z_che.isChecked()); //计算价钱 PriceAndCountEvent priceAndCountEvent = computer(); EventBus.getDefault().post(priceAndCountEv 4000 ent); //判断当前checkbox是选中的状态 if (holder2.z_che.isChecked()) { //如果全部选中(isAllChildCbSelected) if (isAllChildCbSelected(i)) { //改变一级列表的状态 changeGroupCbState(i, true); //改变全选的状态 changeAllCbState(isAllGroupCbSelect()); } } else { //如果没有全部选中,一级列表的checkbox为false不为选中 changeGroupCbState(i, false); changeAllCbState(isAllGroupCbSelect()); } notifyDataSetChanged(); } }); //加号 holder2.jia.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int num = listBean.getNum(); //num为int类型所以要加空字符串 holder2.num.setText(++num + ""); listBean.setNum(num); //如果二级列表的checkbox为选中,计算价钱 if (holder2.z_che.isChecked()) { PriceAndCountEvent priceAndCountEvent = computer(); EventBus.getDefault().post(priceAndCountEvent); } } }); //减号 holder2.jian.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int num = listBean.getNum(); if (num == 1) { return; } holder2.num.setText(--num + ""); listBean.setNum(num); if (holder2.z_che.isChecked()) { PriceAndCountEvent priceAndCountEvent = computer(); EventBus.getDefault().post(priceAndCountEvent); } } }); //删除 holder2.del.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { List<CarBean.DataBean.ListBean> listBeen = childList.get(i); CarBean.DataBean.ListBean remove = listBeen.remove(i1); if (listBeen.size() == 0) { //先移除二级列表的集合,再移除一级列表的集合 childList.remove(i); groupList.remove(i); } //算钱 EventBus.getDefault().post(computer()); notifyDataSetChanged(); } }); return view; } @Override public boolean isChildSelectable(int i, int i1) { return true; } class ViewHolder { TextView textView; CheckBox che; } class ViewHolder2 { ImageView img; TextView z_title; CheckBox z_che; TextView price; TextView xiangqing; ImageView jia; ImageView jian; ImageView del; TextView num; } //改变二级列表的checkbox的状态 如果一级选中,控制二级也选中 private void changeChildCbState(int i, boolean flag) { List<CarBean.DataBean.ListBean> listBeen = childList.get(i); for (int j = 0; j < listBeen.size(); j++) { CarBean.DataBean.ListBean listBean = listBeen.get(j); listBean.setChecked(flag); } Log.i(TAG, "changeChildCbState: "); } //判断一级列表是否全部选中 public boolean isAllGroupCbSelect() { for (int i = 0; i < groupList.size(); i++) { CarBean.DataBean dataBean = groupList.get(i); if (!dataBean.isChecked()) { return false; } } return true; } //改变全选的状态 private void changeAllCbState(boolean flag) { MessageEvent messageEvent = new MessageEvent(); messageEvent.setChecked(flag); EventBus.getDefault().post(messageEvent); } //改变一级列表的checkbox的状态 private void changeGroupCbState(int i, boolean flag) { CarBean.DataBean dataBean = groupList.get(i); dataBean.setChecked(flag); } //判断二级列表是否全部选中 private boolean isAllChildCbSelected(int i) { List<CarBean.DataBean.ListBean> listBeen = childList.get(i); for (int j = 0; j < listBeen.size(); j++) { CarBean.DataBean.ListBean listBean = listBeen.get(j); if (!listBean.isChecked()) { return false; } } return true; } //设置全选,反选 public void changeAllListCbState(boolean flag) { for (int i = 0; i < groupList.size(); i++) { changeGroupCbState(i, flag); changeChildCbState(i, flag); } //算钱 EventBus.getDefault().post(computer()); // notifyDataSetChanged(); } //计算列表的价钱 private PriceAndCountEvent computer() { int count = 0; int price = 0; for (int i = 0; i < childList.size(); i++) { List<CarBean.DataBean.ListBean> listBeen = childList.get(i); for (int j = 0; j < listBeen.size(); j++) { CarBean.DataBean.ListBean listBean = listBeen.get(j); if (listBean.isChecked()) { price += listBean.getNum() * listBean.getPrice(); count += listBean.getNum(); } } } PriceAndCountEvent priceAndCountEvent = new PriceAndCountEvent(); priceAndCountEvent.setCount(count); priceAndCountEvent.setPrice(price); return priceAndCountEvent; } }三.创建两个类用来做全选和计算价钱
public class MessageEvent { private boolean checked; public boolean isChecked() { return checked; } public void setChecked(boolean checked) { this.checked = checked; } }
public class PriceAndCountEvent { private int price; private int count; public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } }四.Activity
//全选/全不选 checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //设置全选 adapter.changeAllListCbState(checkBox.isChecked()); } });
eventBus传值 //必写注解 @Subscribe public void onMessageEvent(MessageEvent event) { checkBox.setChecked(event.isChecked()); } @Subscribe public void onMessageEven(PriceAndCountEvent event) { price.setText("总价" + event.getPrice()); num.setText("共" + event.getCount() + "件商品"); }
相关文章推荐
- Android----仿京东购物车(二级列表,mvp请求数据)
- Android购物车的功能实现(二级列表)
- android购物车二级列表实现+MVP+Okhttp
- Android用MVP实现的二级列表购物车
- Android——二级列表实现购物车
- Android_二级列表购物车之增删改查,全选反选,加减器,价钱数量计算
- android二级列表显示购物车
- Android 二级列表购物车
- [置顶] Android--ExpandableListview二级列表购物车功能实现
- android 二级列表实现购物车
- Android_二级列表购物车逻辑
- Android实现二级列表购物车功能
- Android仿京东App购物车 二级列表+全选反选+Ok封装+拦截器+结算+商品数量计算
- Android_二级列表购物车之增删改查,全选反选,加减器,价钱数量计算
- Android二级列表仿购物车布局
- android 购物车二级列表实现
- Android仿京东App购物车 二级列表+全选反选+Ok封装+拦截器+结算+商品数量计算
- Android 二级列表仿京东购物车 《H》
- Android电商项目 ExpandableListView(二级列表)实现购物车(高仿淘宝) demo
- 购物车二级列表的逻辑