//*********************************fragment**************************************************************************************************
//购物车接口的实现 //*************************************************************** cartAdapter.setOnCartListener(new CartAdapter.OnCartListener() {@Overridepublic void onGroupChecked(int groupPosition) {boolean allCheckedOnGroup = cartAdapter.isAllCheckedOnGroup(groupPosition);cartAdapter.setGoodsCheckedOnGroup(groupPosition, !allCheckedOnGroup);cartAdapter.notifyDataSetChanged();refreshBottom();}@Overridepublic void onGoodsChecked(int groupPosition, int childPosition) {cartAdapter.setGoodsChecked(groupPosition, childPosition);cartAdapter.notifyDataSetChanged();refreshBottom();}@Overridepublic 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 + "");}@Overridepublic 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() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {cartAdapter.removeGoods(groupPosition, childPosition);//判断group的长度是否为0cartAdapter.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() {@Overridepublic void onClick(View v) {boolean allGoodsSelected = cartAdapter.isAllGoodsSelected();cartAdapter.setAllGoodsChecked(!allGoodsSelected);cartAdapter.notifyDataSetChanged();//更新uirefreshBottom();} });
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;}@Overridepublic int getGroupCount() {return list.size();}@Overridepublic int getChildrenCount(int groupPosition) {return list.get(groupPosition).getList().size();}@Overridepublic Object getGroup(int groupPosition) {return list.get(groupPosition);}@Overridepublic Object getChild(int groupPosition, int childPosition) {return list.get(groupPosition).getList().get(childPosition);}@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}@Overridepublic boolean hasStableIds() {return true;}@Overridepublic 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() {@Overridepublic 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;}@Overridepublic 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);//处理imgurlString 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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);}@Overridepublic 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) {//如果有一个没选中返回falsereturn 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长度是否为0public 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;} }