https://www.jianshu.com/p/93515210e053
v层代码
public class Showcart extends Baseactivity implements Ishowcart{ @BindView(R.id.bianji) TextView bianji; @BindView(R.id.edlist) ExpandableListView edlist; @BindView(R.id.heji) TextView heji; @BindView(R.id.jiesuan) Button jiesuan; @BindView(R.id.quanxuan) CheckBox quanxuan; @BindView(R.id.shanchu) Button shanchu; List<Showcartbean.DataBean> data; private Mypresenter mypresenter; private Showcartadapter showcartadapter; boolean flog=true; @Override int getContentView() { return R.layout.activity_showcart; } @Override void initdata() { mypresenter = new Mypresenter(); mypresenter.showcart(this,new Mymode(),this); shanchu.setVisibility(View.GONE); } @Override void btonclick() { //全选的点击事件 quanxuan.setOnClickListener(this); //编辑的点击事件 bianji.setOnClickListener(this); //删除的点击事件 shanchu.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { //全选的逻辑 case R.id.quanxuan: for (int i = 0; i <data.size() ; i++) { data.get(i).setPrenterflog(!data.get(i).isPrenterflog()); List<Showcartbean.Mybean> list = data.get(i).getList(); for (int j = 0; j <list.size() ; j++) { list.get(j).setChildflog(!list.get(j).isChildflog()); } } mypresenter.jisuan(this,new Mymode(),data); showcartadapter.notifyDataSetChanged(); break; //编辑的逻辑 case R.id.bianji: if (flog){ shanchu.setVisibility(View.VISIBLE); heji.setVisibility(View.GONE); jiesuan.setVisibility(View.GONE); bianji.setText("完成"); flog=false; }else { jiesuan.setVisibility(View.VISIBLE); heji.setVisibility(View.VISIBLE); shanchu.setVisibility(View.GONE); bianji.setText("编辑"); flog=true; } break; //删除的逻辑 case R.id.shanchu: for (int i = 0; i <data.size() ; i++) { List<Showcartbean.Mybean> list = data.get(i).getList(); for (int j = 0; j <list.size() ; j++) { if (list.get(j).isChildflog()){ list.remove(j); } if (list.size()==0){ data.remove(i); } } } //调用p层里面计算的方法 mypresenter.jisuan(this,new Mymode(),data); //刷新适配器 showcartadapter.notifyDataSetChanged(); break; } } @Override public void setmyadapter(Context context, List<Showcartbean.DataBean> data) { this.data=data; //设置适配器 showcartadapter = new Showcartadapter(context, data,this); edlist.setAdapter(showcartadapter); } @Override public void setzongjia(double he) { //设置总价 heji.setText("总价:"+he); } }
p层代码
//购物车计算的方法 购物车v层接口 m层接口 购物车父类集合 @Override public void jisuan(Ishowcart ishowcart, Imode imode, List<Showcartbean.DataBean> data) { double jisuan = imode.jisuan(data); ishowcart.setzongjia(jisuan); }
//m层代码
//购物车计算总价的方法 @Override public double jisuan(List<Showcartbean.DataBean> data) { double he=0; for (int i = 0; i <data.size() ; i++) { List<Showcartbean.Mybean> list = data.get(i).getList(); for (int j = 0; j <list.size(); j++) { if (list.get(j).isChildflog()){ //获取价格 double price1 = list.get(j).getPrice(); //获取数量 double selected = list.get(j).getSelected(); //selected+1 必须加1 double mul = mul(price1, selected+1); he= add(he, mul); } } } return he; } public static double add(double v1, double v2) { BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.add(b2).doubleValue(); } public static double mul(double v1, double v2) { BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.multiply(b2).doubleValue(); }
//适配器的代码
public class Showcartadapter extends BaseExpandableListAdapter { private Context context; private List<Showcartbean.DataBean> data; private Ishowcart ishowcart; public Showcartadapter(Context context, List<Showcartbean.DataBean> data, Ishowcart ishowcart) { this.context = context; this.data = data; this.ishowcart = ishowcart; } @Override public int getGroupCount() { return data.size(); } @Override public int getChildrenCount(int groupPosition) { return data.get(groupPosition).getList().size(); } @Override public Object getGroup(int groupPosition) { return data.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition) { return data.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 false; } @Override public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { //优化类 Myprenterhodler myprenterhodler=null; if (convertView==null){ convertView = View.inflate(context, R.layout.cart_prenter, null); CheckBox prenter_cb = convertView.findViewById(R.id.prenter_cb); TextView present_tv = convertView.findViewById(R.id.present_tv); myprenterhodler=new Myprenterhodler(prenter_cb,present_tv); convertView.setTag(myprenterhodler); }else { myprenterhodler = (Myprenterhodler) convertView.getTag(); } //设置自定义属性的布尔值 myprenterhodler.prenter_cb.setChecked(data.get(groupPosition).isPrenterflog()); myprenterhodler.present_tv.setText(data.get(groupPosition).getSellerName()); //父类的CheckBox点击事件 myprenterhodler.prenter_cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取父类集合的布尔值 Showcartbean.DataBean dataBean = data.get(groupPosition); boolean isflog = dataBean.isPrenterflog(); //设置父类取反 isflog=!isflog; //设置父类布尔值 dataBean.setPrenterflog(isflog); //获取子类集合 List<Showcartbean.Mybean> list = dataBean.getList(); for (int j = 0; j <list.size() ; j++) { //设置子控件和父父控件相同的布尔值 list.get(j).setChildflog(isflog); //调用p层计算的方法 Mypresenter mypresenter=new Mypresenter(); mypresenter.jisuan(ishowcart,new Mymode(),data); //刷新适配器 notifyDataSetChanged(); } } }); return convertView; } @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { //子类的优化类 Mychildhodler mychildhodler=null; if (convertView==null){ convertView = View.inflate(context, R.layout.cart_child, null); CheckBox child_ck = convertView.findViewById(R.id.child_ck); SimpleDraweeView sd = convertView.findViewById(R.id.sd); TextView child_tv= convertView.findViewById(R.id.child_tv); TextView child_tv1 = convertView.findViewById(R.id.child_tv1); Jiajian jiajian = convertView.findViewById(R.id.jiajian); mychildhodler=new Mychildhodler(child_ck,sd,child_tv,child_tv1,jiajian); convertView.setTag(mychildhodler); }else { mychildhodler = (Mychildhodler) convertView.getTag(); } //获取子类的数据 final Showcartbean.Mybean mybean = data.get(groupPosition).getList().get(childPosition); mychildhodler.child_ck.setChecked(mybean.isChildflog()); mychildhodler.child_tv.setText(mybean.getTitle()); mychildhodler.child_tv1.setText(""+mybean.getPrice()); String images = mybean.getImages(); String[] split = images.split(".jpg"); mychildhodler.sd.setImageURI(Uri.parse(split[0]+".jpg")); //子类的CheckBox点击事件 mychildhodler.child_ck.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取子类的数据 Showcartbean.Mybean mybean = data.get(groupPosition).getList().get(childPosition); //获取自定义子控件的布尔值 boolean isflog = mybean.isChildflog(); //取反 isflog=!isflog; //给子控件复选框赋值 目的为了记录复选框的值 mybean.setChildflog(isflog); //定义标识位 boolean flog=true; //当前类名调出 子控件的集合 List<Showcartbean.Mybean> list = Showcartadapter.this.data.get(groupPosition).getList(); //遍历子控件的集合 for (int i = 0; i <list.size() ; i++) { //如果子控件有一个的值为false时 父控件的值为false 否则不走if判断 父控件为true if (!list.get(i).isChildflog()){ flog=false; } } //设置父控件的值 data.get(groupPosition).setPrenterflog(flog); //调用p层计算的方法 把购车车对象传过去 便于获取数据 //计算的逻辑在m层做 返回一个double 在p层调用v层的方法把m层计算好的值赋值给textview Mypresenter mypresenter=new Mypresenter(); mypresenter.jisuan(ishowcart,new Mymode(),data); //通知改变 notifyDataSetChanged(); notifyDataSetChanged(); } }); mychildhodler.jiajian.setNumberlistener(new Jiajian.NumberLisner() { @Override public void callBack(int couint) { //设置子控件的加减数量为 couint-1 mybean.setSelected(couint-1); //调用p层计算的方法 Mypresenter mypresenter=new Mypresenter(); mypresenter.jisuan(ishowcart,new Mymode(),data); //刷新适配器 notifyDataSetChanged(); } }); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return false; } class Mychildhodler{ public CheckBox child_ck; public SimpleDraweeView sd; public TextView child_tv; public TextView child_tv1; public Jiajian jiajian; public Mychildhodler(CheckBox child_ck, SimpleDraweeView sd, TextView child_tv, TextView child_tv1,Jiajian jiajian) { this.child_ck = child_ck; this.sd = sd; this.child_tv = child_tv; this.child_tv1 = child_tv1; this.jiajian=jiajian; } } class Myprenterhodler{ public CheckBox prenter_cb; public TextView present_tv; public Myprenterhodler(CheckBox prenter_cb, TextView present_tv) { this.prenter_cb = prenter_cb; this.present_tv = present_tv; } } }