//*********************************fragment**************************************************************************************************
//购物车接口的实现 //*************************************************************** cartAdapter.setOnCartListener(new CartAdapter.OnCartListener() { @Override public void onGroupChecked(int groupPosition) { boolean allCheckedOnGroup = cartAdapter.isAllCheckedOnGroup(groupPosition); cartAdapter.setGoodsCheckedOnGroup(groupPosition, !allCheckedOnGroup); cartAdapter.notifyDataSetChanged(); refreshBottom(); } @Override public void onGoodsChecked(int groupPosition, int childPosition) { cartAdapter.setGoodsChecked(groupPosition, childPosition); cartAdapter.notifyDataSetChanged(); refreshBottom(); } @Override public void onGoodsNumChang(int sellerid, int pid, int num, String selected, int groupPosition, int childPosition) { cartAdapter.setGoodsNum(groupPosition, childPosition, num); cartAdapter.notifyDataSetChanged(); refreshBottom(); //联网更新数据 presenter.getUpdateCart(uid + "", sellerid + "", pid + "", selected, num + ""); } @Override public void onRemoveGoods(final int groupPosition, final int childPosition, final String pid) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage("删除当前商品?"); builder.setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { cartAdapter.removeGoods(groupPosition, childPosition); //判断group的长度是否为0 cartAdapter.setGroup(groupPosition); cartAdapter.notifyDataSetChanged(); refreshBottom(); //联网删除 presenter.deleteCart(uid, Integer.parseInt(pid)); } }); builder.setNegativeButton("取消", null); AlertDialog alertDialog = builder.create(); alertDialog.show(); } }); //************************************************************ //展开所有一级条目 for (int i = 0; i < data.size(); i++) { cartEx.expandGroup(i); } //刷新底部 refreshBottom(); //全选反选,不能使用setOnCheckedChangeListener监听,而要用点击监听 cartQuanxuan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean allGoodsSelected = cartAdapter.isAllGoodsSelected(); cartAdapter.setAllGoodsChecked(!allGoodsSelected); cartAdapter.notifyDataSetChanged(); //更新ui refreshBottom(); } });
public void refreshBottom() { //所有商品都选中,将全选按钮选中 boolean allGoodsSelected = cartAdapter.isAllGoodsSelected(); cartQuanxuan.setChecked(allGoodsSelected); //设置所有商品数量 cartSum.setText("去结算(" + cartAdapter.getSum() + ")"); //设置所有选中商品的总价 cartTotal.setText("合计:¥" + cartAdapter.getTotalPrice()); }
//*********************************adapter**************************************************************************************************
package com.xm2xiu.newjd.adapter; import android.content.Context; import android.net.Uri; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.CheckBox; import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; import com.xm2xiu.newjd.diyview.AddDeleteView; import com.xm2xiu.newjd.R; import com.xm2xiu.newjd.bean.Cart; import java.util.List; /** * author:Created by YangYong on 2018/7/16 0016. */ public class CartAdapter extends BaseExpandableListAdapter { private List<Cart.DataBean> list; private CheckBox seller_check; private CheckBox goods_check; private Cart.DataBean.ListBean bean; private Context context; public CartAdapter(List<Cart.DataBean> list) { this.list = list; } @Override public int getGroupCount() { return list.size(); } @Override public int getChildrenCount(int groupPosition) { return list.get(groupPosition).getList().size(); } @Override public Object getGroup(int groupPosition) { return list.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition) { return list.get(groupPosition).getList().get(childPosition); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return true; } @Override public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { context = parent.getContext(); if (convertView == null) { convertView = View.inflate(parent.getContext(), R.layout.seller_item, null); } TextView seller_name = convertView.findViewById(R.id.seller_name); seller_check = convertView.findViewById(R.id.seller_check); //************************************group点击监听 seller_check.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onCartListener != null) { onCartListener.onGroupChecked(groupPosition); } } }); //如果当前group中的所有商品都被选中,那就把group选中 boolean selectedOnGroup = isSelectedOnGroup(groupPosition); seller_check.setChecked(selectedOnGroup); seller_name.setText(list.get(groupPosition).getSellerName()); return convertView; } private boolean isSelectedOnGroup(int groupPosition) { List<Cart.DataBean.ListBean> list = this.list.get(groupPosition).getList(); for (Cart.DataBean.ListBean bean : list) { if (bean.getSelected() == 0) { return false; } } return true; } @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, final ViewGroup parent) { if (convertView == null) { convertView = View.inflate(parent.getContext(), R.layout.goods_item, null); } bean = list.get(groupPosition).getList().get(childPosition); SimpleDraweeView goods_img = convertView.findViewById(R.id.goods_img); TextView goods_title = convertView.findViewById(R.id.goods_title); TextView goods_price = convertView.findViewById(R.id.goods_price); goods_check = convertView.findViewById(R.id.goods_check); //处理imgurl String imgUrl = getImgUrl(bean.getImages()); goods_img.setImageURI(Uri.parse(imgUrl)); goods_title.setText(bean.getTitle()); goods_price.setText("¥"+bean.getBargainPrice()); //根据集合数据设置复选框选中状态 goods_check.setChecked(bean.getSelected() == 1); //************************************ goods_check.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onCartListener != null) { onCartListener.onGoodsChecked(groupPosition, childPosition); } } }); //设置加减器监听 AddDeleteView goods_ad = convertView.findViewById(R.id.goods_ad); goods_ad.setOnAddDeleteViewClick(new AddDeleteView.OnAddDeleteViewClick() { @Override public void onNumChange(int num) { if (onCartListener != null) { Cart.DataBean.ListBean bean = list.get(groupPosition).getList().get(childPosition); onCartListener.onGoodsNumChang(bean.getSellerid(), bean.getPid(), num,bean.getSelected()+"", groupPosition, childPosition); } } }); //长按删除当前条目 convertView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { Cart.DataBean.ListBean bean = CartAdapter.this.list.get(groupPosition).getList().get(childPosition); if (onCartListener!=null){ onCartListener.onRemoveGoods(groupPosition,childPosition,bean.getPid()+""); } return true; } }); goods_ad.setSum(bean.getNum()); return convertView; } private String getImgUrl(String images) { int i = images.indexOf("!"); return images.substring(0, i); } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } //计算总数 public int getSum() { int sum = 0; for (int i = 0; i < list.size(); i++) { for (int j = 0; j < list.get(i).getList().size(); j++) { if (list.get(i).getList().get(j).getSelected() == 1) { int num = list.get(i).getList().get(j).getNum(); sum += num; } } } return sum; } //结算总价 public float getTotalPrice() { int sum = 0; float price = 0f; for (int i = 0; i < list.size(); i++) { for (int j = 0; j < list.get(i).getList().size(); j++) { if (list.get(i).getList().get(j).getSelected() == 1) { int num = list.get(i).getList().get(j).getNum(); double bargainPrice = list.get(i).getList().get(j).getBargainPrice(); price += (float) (num * bargainPrice); } } } return price; } //判断所有商品是都都被选中 public boolean isAllGoodsSelected() { for (int i = 0; i < list.size(); i++) { for (int j = 0; j < list.get(i).getList().size(); j++) { if (list.get(i).getList().get(j).getSelected() == 0) { //如果有一个没选中返回false return false; } } } return true; } //改变单个group中所有商品的选中状态 public void setGoodsCheckedOnGroup(int groupPosition, boolean groupChecked) { List<Cart.DataBean.ListBean> list = this.list.get(groupPosition).getList(); for (Cart.DataBean.ListBean listBean : list) { listBean.setSelected(groupChecked ? 1 : 0); } } //判断单个group中所有商品是否都被选中 public boolean isAllCheckedOnGroup(int groupPosition) { List<Cart.DataBean.ListBean> list = this.list.get(groupPosition).getList(); for (Cart.DataBean.ListBean listBean : list) { if (listBean.getSelected() == 0) { return false; } } return true; } //改变集合中所有商品的状态 public void setAllGoodsChecked(boolean check) { for (int i = 0; i < list.size(); i++) { for (int j = 0; j < list.get(i).getList().size(); j++) { list.get(i).getList().get(j).setSelected(check ? 1 : 0); } } } //改变某个商品的状态 public void setGoodsChecked(int groupPosition, int childPosition) { //***京东未解之谜1.复用bean会造成复选框取消不了 // list.get(groupPosition).getList().get(childPosition).setSelected(bean.getSelected() == 0 ? 1 : 0); Cart.DataBean.ListBean bean = list.get(groupPosition).getList().get(childPosition); bean.setSelected(bean.getSelected() == 0 ? 1 : 0); } //修改某个商品的数量 public void setGoodsNum(int groupPosition, int childPosition, int num) { list.get(groupPosition).getList().get(childPosition).setNum(num); } //从集合删除某个商品 public void removeGoods( int groupPosition, int childPosition){ list.get(groupPosition).getList().remove(childPosition); } //判断某个group长度是否为0 public void setGroup(int groupPosition){ List<Cart.DataBean.ListBean> listBeans =list.get(groupPosition).getList(); if(listBeans.size()==0){ list.remove(groupPosition); } } public interface OnCartListener { void onGroupChecked(int groupPosition); void onGoodsChecked(int groupPosition, int childPosition); void onGoodsNumChang(int sellerid, int pid, int num,String selected, int groupPosition, int childPosition); void onRemoveGoods(int groupPosition, int childPosition,String pid); } private OnCartListener onCartListener; public void setOnCartListener(OnCartListener onCartListener) { this.onCartListener = onCartListener; } }