实战第二站--购物车简单实现

来源:互联网 发布:销售数据库管理系统 编辑:程序博客网 时间:2024/05/21 06:22

Adapter

public class MyExpandableAdapter extends BaseExpandableListAdapter {    private List<CartBean.DataBean> groupdata;    private Context context;    private List<List<CartBean.DataBean.ListBean>> childlist;      public MyExpandableAdapter( List<CartBean.DataBean> groupdata, Context context, List<List<CartBean.DataBean.ListBean>> childlist) {        this.groupdata = groupdata;          this.context = context;          this.childlist = childlist;      }        @Override      public int getGroupCount() {          return groupdata.size();      }        @Override      public int getChildrenCount(int groupPosition) {          return childlist.get(groupPosition).size();      }        @Override      public Object getGroup(int groupPosition) {          return groupdata.get(groupPosition);      }        @Override      public Object getChild(int groupPosition, int childPosition) {          return null;      }        @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) {        final GroupViewHolder holder;          if (convertView == null) {              convertView = View.inflate(context, R.layout.groupitem, null);            holder = new GroupViewHolder();              holder.tv_group = convertView.findViewById(R.id.tv_group);              holder.group_cb = convertView.findViewById(R.id.gx_group);                convertView.setTag(holder);          } else {              holder = (GroupViewHolder) convertView.getTag();          }        final CartBean.DataBean dataBean = groupdata.get(groupPosition);        String sellerName = dataBean.getSellerName();          holder.group_cb.setChecked(dataBean.isCheck());        holder.tv_group.setText(sellerName);          //点击一级checkbox的状态          holder.group_cb.setOnClickListener(new View.OnClickListener() {              @Override              public void onClick(View v) {                  dataBean.setCheck(holder.group_cb.isChecked());                  //改变所有孩子的状态                    changeChildState(groupPosition,holder.group_cb.isChecked());                    EventBus.getDefault().post(jS());                //通过判断一级的checkbox判断全选的状态                     changeMianQXstatus(checkGroupAll());                  notifyDataSetChanged();              }          });              return convertView;      }        @Override      public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {          final ChildViewHolder holder;          if (convertView == null) {              convertView = View.inflate(context, R.layout.childitem, null);              holder = new ChildViewHolder();                   holder.tv_title=convertView.findViewById(R.id.title);                 holder.price=convertView.findViewById(R.id.price);                //价格                 holder.child_cb=convertView.findViewById(R.id.gouxuan_child);   //子勾选                 holder.jian=convertView.findViewById(R.id.jia);     //加加               holder.del=convertView.findViewById(R.id.del);      //删除              holder.add=convertView.findViewById(R.id.jian);    //减              holder.sdv=convertView.findViewById(R.id.title_img);              holder.tv_num=convertView.findViewById(R.id.tv_num);  //数量                holder.yanse=convertView.findViewById(R.id.yanse);              convertView.setTag(holder);          } else {              holder = (ChildViewHolder) convertView.getTag();          }           final CartBean.DataBean.ListBean listBean = childlist.get(groupPosition).get(childPosition);         int price = (int) listBean.getPrice();             holder.child_cb.setChecked(listBean.isCheck());          holder.price.setText("¥:"+price+"");          String title = listBean.getTitle();          holder.tv_title.setText(title);          String subhead = listBean.getSubhead();          String substring = subhead.substring(1, 10)+".....";          holder.yanse.setText(substring);          String images = listBean.getImages();          String[] split = images.split("\\|");          String s = split[0];        Uri uri=Uri.parse(s);        holder.sdv.setImageURI(uri);      //   listBean.setCou(Integer.parseInt(holder.tv_num.getText().toString()));        //给子条目的checkBox点击事件          holder.child_cb.setOnClickListener(new View.OnClickListener() {              @Override              public void onClick(View v) {                  listBean.setCheck(holder.child_cb.isChecked());                    EventBus.getDefault().post(jS());                  //如果二级的checkBox选中,就让一级的checkBox勾选                  if(holder.child_cb.isChecked()) {                        if (ischeckAllchild(groupPosition)) {                          //改变一级checkBox的状态                          changeGroupstatus(groupPosition,true);                          //通过判断一级的CheckBox的状态来改变全选的状态                           changeMianQXstatus(checkGroupAll());                        }                  }else{                      changeGroupstatus(groupPosition,false);                      changeMianQXstatus(checkGroupAll());                  }                  notifyDataSetChanged();              }            });            //点击加加的功能          holder.add.setOnClickListener(new View.OnClickListener() {              @Override              public void onClick(View v) {                  int cou = listBean.getCou();                  holder.tv_num.setText(++cou+"");                  listBean.setCou(cou);                  if(holder.child_cb.isChecked()){                      EventBus.getDefault().post(jS());                  }                }          });          //点击减减的功能          holder.jian.setOnClickListener(new View.OnClickListener() {              @Override              public void onClick(View v) {                  int cou = listBean.getCou();                    if(cou==1) {                    Toast.makeText(context, "最小数量为1", Toast.LENGTH_SHORT).show();                    return;}                holder.tv_num.setText(--cou+"");                  listBean.setCou(cou);                  if (holder.child_cb.isChecked()) {                          EventBus.getDefault().post(jS());                    }              }          });        //点击删除          holder.del.setOnClickListener(new View.OnClickListener() {              @Override              public void onClick(View v) {                List<CartBean.DataBean.ListBean> listBeen = childlist.get(groupPosition);              CartBean.DataBean.ListBean remove = listBeen.remove(childPosition);                if(listBeen.size()==0){                      childlist.remove(childPosition);                      groupdata.remove(groupPosition);                  }                 EventBus.getDefault().post(jS());                  notifyDataSetChanged();                }          });            return convertView;      }        @Override      public boolean isChildSelectable(int groupPosition, int childPosition) {          return true;      }        class GroupViewHolder {          CheckBox group_cb;        TextView tv_group;    }        class ChildViewHolder {          CheckBox child_cb;          TextView tv_title,price,yanse,tv_num;          ImageView del,add,jian;        SimpleDraweeView sdv;        }      /**      * 判断全部的二级是CheckBox否选中      *      */      private boolean ischeckAllchild(int g){        List<CartBean.DataBean.ListBean> listBeen = childlist.get(g);        for (int i = 0; i <listBeen.size() ; i++) {            CartBean.DataBean.ListBean listBean = listBeen.get(i);            if(!listBean.isCheck()){                  return false;              }          }          return true;      }        /**      * 计算数量和价格      * 通过遍历一级的得到二级的CheckBox,如果是选择的选中状态的话,就统计它们的总计的数量和价格      */      private CountAndPrice jS(){        int cou=0;          int jiage=0;          for (int i = 0; i <groupdata.size() ; i++) {              for (int j = 0; j <childlist.get(i).size() ; j++) {                CartBean.DataBean.ListBean listBean = childlist.get(i).get(j);                if(listBean.isCheck()){                    cou+=listBean.getCou();                      jiage+=(int)listBean.getPrice()*listBean.getCou();                  }                }            }          CountAndPrice countAndPrice = new CountAndPrice();          countAndPrice.setCount(cou);          countAndPrice.setPrice(jiage);          return countAndPrice;      }      /**      * 改变一级列表的状态      */      private void changeGroupstatus(int groupPosition,boolean flag ){        CartBean.DataBean dataBean = groupdata.get(groupPosition);        dataBean.setCheck(flag);      }      /**      * 改变全选的状态      *      */      private void changeMianQXstatus(boolean flag){          MessgeEvent messgeEvent = new MessgeEvent();         messgeEvent.setCheck(flag);          EventBus.getDefault().post(messgeEvent);      }      /**      * 判断一级的是否全部选中      */      private boolean checkGroupAll(){          for (int i = 0; i < groupdata.size(); i++) {              if(!groupdata.get(i).isCheck()){                  return false;              }          }          return true;      }      /**      * 改变所有孩子的状态      */      private void changeChildState(int grouPistion,boolean flag){          List<CartBean.DataBean.ListBean> listBeen = childlist.get(grouPistion);        for (int i = 0; i < listBeen.size(); i++) {              listBeen.get(i).setCheck(flag);          }      }      /**      * 改变全选的      */      public void qx(boolean flag){          for (int i = 0; i < groupdata.size(); i++) {             changeGroupstatus(i, flag);             changeChildState(i, flag);          }          EventBus.getDefault().post(jS());          notifyDataSetChanged();      }  
Bean包
public class CartBean {    /**     * msg : 请求成功     * code : 0     * data : [{"list":[{"bargainPrice":22.9,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/2542855.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t1930/284/2865629620/390243/e3ade9c4/56f0a08fNbd3a1235.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2137/336/2802996626/155915/e5e90d7a/56f0a09cN33e01bd0.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t1882/31/2772215910/389956/c8dbf370/56f0a0a2Na0c86ea6.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2620/166/2703833710/312660/531aa913/57709035N33857877.jpg!q70.jpg","num":1,"pid":24,"price":288,"pscid":2,"selected":0,"sellerid":1,"subhead":"三只松鼠零食特惠,专区满99减50,满199减100,火速抢购》","title":"三只松鼠 坚果炒货 零食奶油味 碧根果225g/袋"},{"bargainPrice":11800,"createtime":"2017-10-10T17:33:37","detailUrl":"https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg","num":2,"pid":57,"price":5199,"pscid":40,"selected":0,"sellerid":1,"subhead":"【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统","title":"小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银\r\n"},{"bargainPrice":99,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/4345173.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6037/35/2944615848/95178/6cd6cff0/594a3a10Na4ec7f39.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6607/258/1025744923/75738/da120a2d/594a3a12Ne3e6bc56.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6370/292/1057025420/64655/f87644e3/594a3a12N5b900606.jpg!q70.jpg","num":1,"pid":45,"price":2999,"pscid":39,"selected":0,"sellerid":1,"subhead":"高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽!","title":"一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机"}],"sellerName":"商家1","sellerid":"1"},{"list":[{"bargainPrice":6666,"createtime":"2017-10-10T16:01:31","detailUrl":"https://item.m.jd.com/product/5089273.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t8284/363/1326459580/71585/6d3e8013/59b857f2N6ca75622.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t9346/182/1406837243/282106/68af5b54/59b8480aNe8af7f5c.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8434/54/1359766007/56140/579509d9/59b85801Nfea207db.jpg!q70.jpg","num":1,"pid":46,"price":234,"pscid":39,"selected":0,"sellerid":2,"subhead":"【iPhone新品上市】新一代iPhone,让智能看起来更不一样","title":"Apple iPhone 8 Plus (A1864) 64GB 金色 移动联通电信4G手机"}],"sellerName":"商家2","sellerid":"2"},{"list":[{"bargainPrice":111.99,"createtime":"2017-10-03T23:43:53","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","num":5,"pid":12,"price":256,"pscid":1,"selected":0,"sellerid":5,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}],"sellerName":"商家5","sellerid":"5"},{"list":[{"bargainPrice":11800,"createtime":"2017-10-03T23:53:28","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","num":1,"pid":62,"price":15999,"pscid":40,"selected":0,"sellerid":6,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"}],"sellerName":"商家6","sellerid":"6"},{"list":[{"bargainPrice":399,"createtime":"2017-10-03T23:53:28","detailUrl":"https://item.m.jd.com/product/1439822107.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t5887/201/859509257/69994/6bde9bf6/59224c24Ne854e14c.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5641/233/853609022/57374/5c73d281/59224c24N3324d5f4.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5641/233/853609022/57374/5c73d281/59224c24N3324d5f4.jpg!q70.jpg","num":1,"pid":86,"price":777,"pscid":85,"selected":0,"sellerid":7,"subhead":"满2件,总价打6.50折","title":"Gap男装 休闲舒适简约水洗五袋直筒长裤紧身牛仔裤941825 深灰色 33/32(175/84A)"}],"sellerName":"商家7","sellerid":"7"},{"list":[{"bargainPrice":111.99,"createtime":"2017-10-14T21:39:05","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","num":12,"pid":1,"price":118,"pscid":1,"selected":0,"sellerid":17,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}],"sellerName":"商家17","sellerid":"17"},{"list":[{"bargainPrice":111.99,"createtime":"2017-10-14T21:39:05","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","num":4,"pid":2,"price":299,"pscid":1,"selected":0,"sellerid":18,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}],"sellerName":"商家18","sellerid":"18"},{"list":[{"bargainPrice":11800,"createtime":"2017-10-03T23:53:28","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","num":1,"pid":76,"price":37999.99,"pscid":40,"selected":0,"sellerid":20,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"}],"sellerName":"商家20","sellerid":"20"},{"list":[{"bargainPrice":111.99,"createtime":"2017-10-14T21:39:05","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","num":1,"pid":5,"price":88.99,"pscid":1,"selected":0,"sellerid":21,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}],"sellerName":"商家21","sellerid":"21"}]     */    private String msg;    private String code;    private List<DataBean> data;    public String getMsg() {        return msg;    }    public void setMsg(String msg) {        this.msg = msg;    }    public String getCode() {        return code;    }    public void setCode(String code) {        this.code = code;    }    public List<DataBean> getData() {        return data;    }    public void setData(List<DataBean> data) {        this.data = data;    }    public static class DataBean {        /**         * list : [{"bargainPrice":22.9,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/2542855.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t1930/284/2865629620/390243/e3ade9c4/56f0a08fNbd3a1235.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2137/336/2802996626/155915/e5e90d7a/56f0a09cN33e01bd0.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t1882/31/2772215910/389956/c8dbf370/56f0a0a2Na0c86ea6.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2620/166/2703833710/312660/531aa913/57709035N33857877.jpg!q70.jpg","num":1,"pid":24,"price":288,"pscid":2,"selected":0,"sellerid":1,"subhead":"三只松鼠零食特惠,专区满99减50,满199减100,火速抢购》","title":"三只松鼠 坚果炒货 零食奶油味 碧根果225g/袋"},{"bargainPrice":11800,"createtime":"2017-10-10T17:33:37","detailUrl":"https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg","num":2,"pid":57,"price":5199,"pscid":40,"selected":0,"sellerid":1,"subhead":"【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统","title":"小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银\r\n"},{"bargainPrice":99,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/4345173.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6037/35/2944615848/95178/6cd6cff0/594a3a10Na4ec7f39.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6607/258/1025744923/75738/da120a2d/594a3a12Ne3e6bc56.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6370/292/1057025420/64655/f87644e3/594a3a12N5b900606.jpg!q70.jpg","num":1,"pid":45,"price":2999,"pscid":39,"selected":0,"sellerid":1,"subhead":"高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽!","title":"一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机"}]         * sellerName : 商家1         * sellerid : 1         */        private String sellerName;        private String sellerid;        private List<ListBean> list;        private boolean check;        public boolean isCheck() {            return check;        }        public void setCheck(boolean check) {            this.check = check;        }        public String getSellerName() {            return sellerName;        }        public void setSellerName(String sellerName) {            this.sellerName = sellerName;        }        public String getSellerid() {            return sellerid;        }        public void setSellerid(String sellerid) {            this.sellerid = sellerid;        }        public List<ListBean> getList() {            return list;        }        public void setList(List<ListBean> list) {            this.list = list;        }        public static class ListBean {            /**             * bargainPrice : 22.9             * createtime : 2017-10-14T21:48:08             * detailUrl : https://item.m.jd.com/product/2542855.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends             * images : https://m.360buyimg.com/n0/jfs/t1930/284/2865629620/390243/e3ade9c4/56f0a08fNbd3a1235.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2137/336/2802996626/155915/e5e90d7a/56f0a09cN33e01bd0.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t1882/31/2772215910/389956/c8dbf370/56f0a0a2Na0c86ea6.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2620/166/2703833710/312660/531aa913/57709035N33857877.jpg!q70.jpg             * num : 1             * pid : 24             * price : 288.0             * pscid : 2             * selected : 0             * sellerid : 1             * subhead : 三只松鼠零食特惠,专区满99减50,满199减100,火速抢购》             * title : 三只松鼠 坚果炒货 零食奶油味 碧根果225g/袋             */            private double bargainPrice;            private String createtime;            private String detailUrl;            private String images;            private int num;            private int pid;            private double price;            private int pscid;            private int selected;            private int sellerid;            private String subhead;            private String title;            private int cou;            public int getCou() {                return cou;            }            public void setCou(int cou) {                this.cou = cou;            }            private boolean check;            public boolean isCheck() {                return check;            }            public void setCheck(boolean check) {                this.check = check;            }            public double getBargainPrice() {                return bargainPrice;            }            public void setBargainPrice(double bargainPrice) {                this.bargainPrice = bargainPrice;            }            public String getCreatetime() {                return createtime;            }            public void setCreatetime(String createtime) {                this.createtime = createtime;            }            public String getDetailUrl() {                return detailUrl;            }            public void setDetailUrl(String detailUrl) {                this.detailUrl = detailUrl;            }            public String getImages() {                return images;            }            public void setImages(String images) {                this.images = images;            }            public int getNum() {                return num;            }            public void setNum(int num) {                this.num = num;            }            public int getPid() {                return pid;            }            public void setPid(int pid) {                this.pid = pid;            }            public double getPrice() {                return price;            }            public void setPrice(double price) {                this.price = price;            }            public int getPscid() {                return pscid;            }            public void setPscid(int pscid) {                this.pscid = pscid;            }            public int getSelected() {                return selected;            }            public void setSelected(int selected) {                this.selected = selected;            }            public int getSellerid() {                return sellerid;            }            public void setSellerid(int sellerid) {                this.sellerid = sellerid;            }            public String getSubhead() {                return subhead;            }            public void setSubhead(String subhead) {                this.subhead = subhead;            }            public String getTitle() {                return title;            }            public void setTitle(String title) {                this.title = title;            }        }    }}
2
public class CountAndPrice {    private int count ;    private int price;    public int getCount() {        return count;    }    public void setCount(int count) {        this.count = count;    }    public int getPrice() {        return price;    }    public void setPrice(int price) {        this.price = price;    }}
3
public class MessgeEvent {    private boolean check;    public boolean isCheck() {        return check;    }    public void setCheck(boolean check) {        this.check = check;    }}
4
public class Tianjia {    /**     * msg : 加购成功     * code : 0     */    private String msg;    private String code;    public String getMsg() {        return msg;    }    public void setMsg(String msg) {        this.msg = msg;    }    public String getCode() {        return code;    }    public void setCode(String code) {        this.code = code;    }}
5
public class XQBean {    /**     * msg :     * seller : {"description":"我是商家2","icon":"http://120.27.23.105/images/icon.png","name":"商家2","productNums":999,"score":5,"sellerid":2}     * code : 0     * data : {"bargainPrice":111.99,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","itemtype":2,"pid":9,"price":78.99,"pscid":1,"salenum":2356,"sellerid":2,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}     */    private String msg;    private SellerBean seller;    private String code;    private DataBean data;    public String getMsg() {        return msg;    }    public void setMsg(String msg) {        this.msg = msg;    }    public SellerBean getSeller() {        return seller;    }    public void setSeller(SellerBean seller) {        this.seller = seller;    }    public String getCode() {        return code;    }    public void setCode(String code) {        this.code = code;    }    public DataBean getData() {        return data;    }    public void setData(DataBean data) {        this.data = data;    }    public static class SellerBean {        /**         * description : 我是商家2         * icon : http://120.27.23.105/images/icon.png         * name : 商家2         * productNums : 999         * score : 5.0         * sellerid : 2         */        private String description;        private String icon;        private String name;        private int productNums;        private double score;        private int sellerid;        public String getDescription() {            return description;        }        public void setDescription(String description) {            this.description = description;        }        public String getIcon() {            return icon;        }        public void setIcon(String icon) {            this.icon = icon;        }        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }        public int getProductNums() {            return productNums;        }        public void setProductNums(int productNums) {            this.productNums = productNums;        }        public double getScore() {            return score;        }        public void setScore(double score) {            this.score = score;        }        public int getSellerid() {            return sellerid;        }        public void setSellerid(int sellerid) {            this.sellerid = sellerid;        }    }    public static class DataBean {        /**         * bargainPrice : 111.99         * createtime : 2017-10-14T21:48:08         * detailUrl : https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends         * images : https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg         * itemtype : 2         * pid : 9         * price : 78.99         * pscid : 1         * salenum : 2356         * sellerid : 2         * subhead : 每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下         * title : 北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g         */        private double bargainPrice;        private String createtime;        private String detailUrl;        private String images;        private int itemtype;        private int pid;        private double price;        private int pscid;        private int salenum;        private int sellerid;        private String subhead;        private String title;        public double getBargainPrice() {            return bargainPrice;        }        public void setBargainPrice(double bargainPrice) {            this.bargainPrice = bargainPrice;        }        public String getCreatetime() {            return createtime;        }        public void setCreatetime(String createtime) {            this.createtime = createtime;        }        public String getDetailUrl() {            return detailUrl;        }        public void setDetailUrl(String detailUrl) {            this.detailUrl = detailUrl;        }        public String getImages() {            return images;        }        public void setImages(String images) {            this.images = images;        }        public int getItemtype() {            return itemtype;        }        public void setItemtype(int itemtype) {            this.itemtype = itemtype;        }        public int getPid() {            return pid;        }        public void setPid(int pid) {            this.pid = pid;        }        public double getPrice() {            return price;        }        public void setPrice(double price) {            this.price = price;        }        public int getPscid() {            return pscid;        }        public void setPscid(int pscid) {            this.pscid = pscid;        }        public int getSalenum() {            return salenum;        }        public void setSalenum(int salenum) {            this.salenum = salenum;        }        public int getSellerid() {            return sellerid;        }        public void setSellerid(int sellerid) {            this.sellerid = sellerid;        }        public String getSubhead() {            return subhead;        }        public void setSubhead(String subhead) {            this.subhead = subhead;        }        public String getTitle() {            return title;        }        public void setTitle(String title) {            this.title = title;        }    }}model
public class CartModel {    public void getCart(int uid, String str, final CGSB<CartBean> cgsb){        Flowable<CartBean> flowable = RetrofitHepler.getSerViceAPI().getCart(uid, str);        flowable.observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.io())                .subscribe(new Consumer<CartBean>() {                    @Override                    public void accept(CartBean cartBean) throws Exception {                        cgsb.chengGong(cartBean);                    }                });    }}
2
public interface XQjieKou {    public void getXQ(int pid, String str, final CGSB<XQBean> cgsb);}3
public class XQModel implements XQjieKou{    @Override    public void getXQ(int pid, String str, final CGSB<XQBean>cgsb){        Flowable<XQBean> flowable = RetrofitHepler.getSerViceAPI().getXQ(pid, str);        flowable.observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.io())                .subscribe(new Consumer<XQBean>() {                    @Override                    public void accept(XQBean xqBean) throws Exception {                        cgsb.chengGong(xqBean);                    }                });    }    public void geTJ(int uid,int pid, String str, final CGSB<Tianjia>cgsb){        Flowable<Tianjia> flowable = RetrofitHepler.getSerViceAPI().getMsg(uid, pid, str);        flowable.observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.io())                .subscribe(new Consumer<Tianjia>() {                    @Override                    public void accept(Tianjia tianjia) throws Exception {                        cgsb.chengGong(tianjia);                    }                });    }}net
public class API {    public static String HOST="http://120.27.23.105/product/";}
2
public interface CGSB<T> {    void chengGong(T t);}
3
public class RetrofitHepler {        public static OkHttpClient okHttpClient;        public static ServiceAPI serViceAPI;              /**          * 优先执行          */          static {              getOkHttpClient();          }          public static OkHttpClient getOkHttpClient(){              if(okHttpClient==null){                  synchronized (OkHttpClient.class){                      if(okHttpClient==null){                          okHttpClient=new OkHttpClient();                      }                  }              }              return okHttpClient;          }          public static ServiceAPI getSerViceAPI(){                  if(serViceAPI==null){                  synchronized (OkHttpClient.class){                      if(serViceAPI==null){                         serViceAPI=onCreate(ServiceAPI.class,API.HOST);                    }                  }              }              return serViceAPI;          }                public static <T> T onCreate(Class<T>tClass,String url){              Retrofit retrofit = new Retrofit.Builder()                    .baseUrl(url)                      .addConverterFactory(GsonConverterFactory.create())                    .client(okHttpClient)                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                    .build();                    return retrofit.create(tClass);          }  4
public interface ServiceAPI {    @GET("getProductDetail")    Flowable<XQBean> getXQ(@Query("pid")int pid,@Query("source")String str);    @GET("addCart")    Flowable<Tianjia> getMsg(@Query("uid")int uid,@Query("pid")int pid, @Query("source")String str);    @GET("getCarts")    Flowable<CartBean> getCart(@Query("uid")int uid, @Query("source")String str);}
presenter
public class CartPersenter {    private final CartModel cartModel;       private ICart iCart;    public CartPersenter(ICart iCart) {        cartModel = new CartModel();        this.iCart=iCart;    }    public void getCart(){        cartModel.getCart(3043, "android", new CGSB<CartBean>() {            @Override            public void chengGong(CartBean cartBean) {                List<CartBean.DataBean> grouplist = cartBean.getData();                List<List<CartBean.DataBean.ListBean>> childlist=new ArrayList<>();                for (int i = 0; i <grouplist.size() ; i++) {                    CartBean.DataBean dataBean = grouplist.get(i);                    List<CartBean.DataBean.ListBean> list = dataBean.getList();                    childlist.add(list);                }                iCart.showlist(grouplist,childlist);            }        });    }}
2
public class XQPersenter {    private final XQModel xqModel;    private Iview iview;    public XQPersenter(Iview iview) {        xqModel = new XQModel();        this.iview=iview;    }    public void getXQ(){        xqModel.getXQ(12, "android", new CGSB<XQBean>() {            @Override            public void chengGong(XQBean xqBean) {                iview.showBean(xqBean);            }        });    }    public void getTJ(){        xqModel.geTJ(3043, 12, "android", new CGSB<Tianjia>() {            @Override            public void chengGong(Tianjia tianjia) {                iview.showStr(tianjia.getMsg());            }        });    }}
view
public class Main2Activity extends AppCompatActivity implements ICart {    private ExpandableListView mElv;    private CheckBox mQuanxuan;    /**     * 总价:0.0     */    private TextView mZongjia;    /**     * 共0件商品     */    private TextView mTvCount;    private MyExpandableAdapter myExpandableAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main2);        initView();        new CartPersenter(this).getCart();        EventBus.getDefault().register(this);        mQuanxuan.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                myExpandableAdapter.qx(mQuanxuan.isChecked());            }        });    }    @Override    public void showlist(List<CartBean.DataBean> grouplist, List<List<CartBean.DataBean.ListBean>> childlist) {        myExpandableAdapter = new MyExpandableAdapter(grouplist, this,childlist);        mElv.setAdapter(myExpandableAdapter);        for (int i = 0; i <grouplist.size() ; i++) {            mElv.expandGroup(i);        }    }    private void initView() {        mElv = (ExpandableListView) findViewById(R.id.elv);        mQuanxuan = (CheckBox) findViewById(R.id.quanxuan);        mZongjia = (TextView) findViewById(R.id.zongjia);        mTvCount = (TextView) findViewById(R.id.tv_count);    }    //接收传过来的值    @Subscribe    public void onPriceAndCount(CountAndPrice cp){        mZongjia.setText("共"+cp.getCount()+"件商品");        mTvCount.setText("总计:"+cp.getPrice());    }    //接收传过来的值    @Subscribe    public void onPriceAndCount(MessgeEvent event){        //改变全选的状态        mQuanxuan.setChecked(event.isCheck());    }    @Override    protected void onDestroy() {        super.onDestroy();        EventBus.getDefault().unregister(this);    }}
2
public class MainActivity extends AppCompatActivity implements View.OnClickListener ,Iview{    private SimpleDraweeView mXqsdv;    private TextView mTvtitle;    /**     * 跳转到购物车     */    private Button mTiaozhuan;    /**     * 添加到购物车     */    private Button mTianjia;    private XQPersenter xqPersenter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        xqPersenter = new XQPersenter(this);        xqPersenter.getXQ();    }    private void initView() {        mXqsdv = (SimpleDraweeView) findViewById(R.id.xqsdv);        mTvtitle = (TextView) findViewById(R.id.tvtitle);        mTiaozhuan = (Button) findViewById(R.id.tiaozhuan);        mTiaozhuan.setOnClickListener(this);        mTianjia = (Button) findViewById(R.id.tianjia);        mTianjia.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            default:                break;            case R.id.tiaozhuan:                startActivity(new Intent(this,Main2Activity.class));                break;            case R.id.tianjia:               xqPersenter.getTJ();                break;        }    }    @Override    public void showBean(Object o) {        XQBean xqBean= (XQBean) o;        XQBean.DataBean data = xqBean.getData();        String s = data.getImages().split("\\|")[0];        Uri uri=Uri.parse(s);        mXqsdv.setImageURI(uri);        mTvtitle.setText(data.getTitle()+"\n"+data.getPrice());    }    @Override    public void showStr(String s) {        Toast.makeText(this, s, Toast.LENGTH_SHORT).show();    }}
3
public class MyAPP extends Application {    @Override    public void onCreate() {        super.onCreate();        Fresco.initialize(this);    }}4
public interface ICart {    void showlist(  List<CartBean.DataBean> grouplist, List<List<CartBean.DataBean.ListBean>> childlist);}
5
public interface Iview<T> {    void showBean(T t);    void showStr(String s);}
drawable
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android">    <corners android:radius="200dp"></corners>    <stroke android:color="@color/colorPrimaryDark" android:width="1dp"></stroke></shape>
layout
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.baiwei.shenxuesong.shenxuesong1219.view.MainActivity">  <com.facebook.drawee.view.SimpleDraweeView      android:layout_width="300dp"      android:id="@+id/xqsdv"       android:layout_gravity="center"      android:layout_height="300dp" />  <TextView      android:id="@+id/tvtitle"      android:layout_width="match_parent"      android:layout_height="wrap_content" />    <LinearLayout        android:orientation="horizontal"        android:layout_width="match_parent"        android:layout_height="wrap_content">        <Button            android:id="@+id/tiaozhuan"            android:layout_weight="1"            android:text="跳转到购物车"            android:layout_width="match_parent"            android:layout_height="wrap_content" />        <Button            android:id="@+id/tianjia"            android:layout_weight="1"            android:text="添加到购物车"            android:layout_width="match_parent"            android:layout_height="wrap_content" />    </LinearLayout></LinearLayout>
2
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:orientation="vertical"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.baiwei.shenxuesong.shenxuesong1219.view.Main2Activity">    <ExpandableListView        android:id="@+id/elv"        android:layout_weight="1"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <LinearLayout        android:layout_weight="9"        android:orientation="horizontal"        android:layout_width="match_parent"        android:layout_height="match_parent">        <CheckBox            android:id="@+id/quanxuan"            android:layout_width="wrap_content"            android:layout_height="wrap_content" />        <TextView            android:text="全选"            android:layout_width="wrap_content"            android:layout_height="wrap_content" />        <LinearLayout            android:layout_marginLeft="50dp"            android:orientation="vertical"            android:layout_width="wrap_content"            android:layout_height="wrap_content">            <TextView                android:id="@+id/zongjia"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:text="总价:0.0"                />            <TextView                android:text="共0件商品"                android:id="@+id/tv_count"                android:layout_width="wrap_content"                android:layout_height="wrap_content" />        </LinearLayout>        <TextView            android:text="去结算"            android:background="#FFD82020"            android:layout_marginLeft="100dp"            android:layout_width="wrap_content"            android:layout_height="wrap_content" />    </LinearLayout></LinearLayout>3
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:id="@+id/title"        android:layout_marginLeft="20dp"        android:layout_width="match_parent"        android:layout_height="wrap_content" />    <LinearLayout        android:orientation="horizontal"        android:layout_width="wrap_content"        android:layout_height="wrap_content">        <CheckBox            android:layout_marginLeft="20dp"            android:gravity="center_vertical"            android:id="@+id/gouxuan_child"            android:layout_width="wrap_content"            android:layout_height="wrap_content" />        <com.facebook.drawee.view.SimpleDraweeView            android:gravity="center_vertical"            android:id="@+id/title_img"            android:layout_width="50dp"            android:layout_height="50dp" />        <LinearLayout            android:orientation="vertical"            android:layout_marginLeft="30dp"            android:layout_width="wrap_content"            android:layout_height="wrap_content">            <TextView                android:id="@+id/price"                android:layout_marginLeft="10dp"                android:layout_width="wrap_content"                android:layout_height="wrap_content" />            <TextView                android:id="@+id/yanse"                android:layout_marginLeft="10dp"                android:layout_width="wrap_content"                android:layout_height="wrap_content" />            <LinearLayout                android:layout_marginLeft="100dp"                android:orientation="horizontal"                android:layout_width="wrap_content"                android:layout_height="wrap_content">                <ImageView                    android:id="@+id/jian"                    android:layout_width="20dp"                    android:layout_height="20dp"                    android:src="@drawable/shopcart_add_red" />                <TextView                    android:id="@+id/tv_num"                    android:layout_width="wrap_content"                    android:layout_height="wrap_content"                    android:layout_marginLeft="5dp"                    android:background="@drawable/ite"                    android:paddingBottom="2dp"                    android:paddingLeft="20dp"                    android:paddingRight="20dp"                    android:paddingTop="2dp"                    android:text="1" />                <ImageView                    android:id="@+id/jia"                    android:layout_width="20dp"                    android:layout_height="20dp"                    android:layout_marginLeft="5dp"                    android:src="@drawable/shopcart_minus_red" />            </LinearLayout>        </LinearLayout>        <ImageView            android:id="@+id/del"            android:layout_marginLeft="20dp"            android:background="@drawable/a"            android:layout_width="32dp"            android:layout_height="29dp" />    </LinearLayout></LinearLayout>
4
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal" android:layout_width="match_parent"    android:layout_height="match_parent">    <CheckBox        android:id="@+id/gx_group"        android:focusable="false"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <TextView        android:id="@+id/tv_group"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>

依赖
 compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包    compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包    compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包    compile 'io.reactivex.rxjava2:rxjava:2.1.3'    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'    compile 'de.greenrobot:eventbus:3.0.0-beta1'    compile 'com.facebook.fresco:fresco:0.11.0'
别忘记加入权限和声明

原创粉丝点击