布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent"> <include layout="@layout/layout_title"/> <ExpandableListView android:id="@+id/elv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1"> </ExpandableListView> <include layout="@layout/layout_bottom"/> </LinearLayout>
utils包
OkHttpUtils类
public class OkHttpUtils { private static OkHttpUtils OK_HTTP_UTILS = null; //定义一个Handler private static Handler handler = new Handler(); public OkHttpUtils() { } /** * 得到OkHttpUtils实例对象 * * @return */ public static OkHttpUtils getInstance() { if (null == OK_HTTP_UTILS) { synchronized (OkHttpUtils.class) { if (null == OK_HTTP_UTILS) { OK_HTTP_UTILS = new OkHttpUtils(); } } } return OK_HTTP_UTILS; } /** * Get请求 * * @param path http://www.baidu.com?key=value&key=value * @param onFinishListener */ public void doGet(String path,Map<String,String> map,final onFinish onFinishListener) { StringBuffer sb = new StringBuffer(); sb.append(path); //判断path是否包含一个 if(sb.indexOf("?") != -1){ //判断"?"是否在最后一个 if(sb.indexOf("?") != sb.length() -1){ sb.append("&"); } }else{ sb.append("?"); } //遍历map集合中所有请求参数 for (Map.Entry<String, String> entry: map.entrySet()){ sb.append(entry.getKey()) .append("=") .append(entry.getValue()) .append("&"); } //判断get请求路径最后是否包含一个"&" if(sb.lastIndexOf("&") != -1){ sb.deleteCharAt(sb.length() - 1); } OkHttpClient okHttpClient = new OkHttpClient.Builder() //添加应用拦截器 .addInterceptor(new Utils.CommonParamsInterceptor()) //.addNetworkInterceptor() //添加网络拦截器 .build(); //构建请求项 Request request = new Request.Builder() .get() .url(sb.toString()) .build(); Call call = okHttpClient.newCall(request); //execute 子线程 enqueue // call.enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { onFinishListener.onFailed(e.getMessage()); } }); } @Override public void onResponse(Call call, Response response) throws IOException { //得到服务器的响应结果 final String result = response.body().string(); //请求成功 handler.post(new Runnable() { @Override public void run() { //主线程当中执行 onFinishListener.onSuccess(result); } }); } }); } /** * post请求 * * @param path * @param map * @param onFinishListener */ public void doPost(String path, Map<String, String> map, final onFinish onFinishListener) { OkHttpClient okHttpClient = new OkHttpClient.Builder() //添加应用拦截器 公共参数 .addInterceptor(new Utils.CommonParamsInterceptor()) .build(); //构建参数的对象 FormBody.Builder builder = new FormBody.Builder(); for (String key : map.keySet()) { builder.add(key, map.get(key)); } final Request request = new Request.Builder() .post(builder.build()) .url(path) .build(); Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { onFinishListener.onFailed(e.getMessage()); } }); } @Override public void onResponse(Call call, Response response) throws IOException { final String result = response.body().string(); handler.post(new Runnable() { @Override public void run() { //主线程当中执行 onFinishListener.onSuccess(result); } }); } }); } }
onFinish接口
public interface onFinish { void onSuccess(Object o); void onFailed(String s); }Utils类public class Utils { public static class CommonParamsInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { //得到原始的请求对象 Request request = chain.request(); //得到用户所使用的请求方式 String method = request.method(); if ("GET".equals(method)) { //url //原始的请求接口 String oldUrl = request.url().toString(); //拼接成一个新的URL String newUrl = oldUrl + "&source=android"; //重新构建请求体 request = new Request.Builder() .url(newUrl) .build(); } else if ("POST".equals(method)) { //得到原始的url String oldUrl = request.url().toString(); //得到原有的请求参数 FormBody oldBody = (FormBody) request.body();//1 2 3 //新的构建项 FormBody.Builder builder = new FormBody.Builder(); for (int i = 0; i < oldBody.size(); ++i) { //取出相关请求参数(原有的) String name = oldBody.name(i); String value = oldBody.value(i); //将原始的参数拼装到新的构建体当中 builder.add(name, value); } //拼装我们的公共参数 builder.add("source", "android"); request = new Request.Builder() .url(oldUrl) .post(builder.build()) .build(); } //重新发送请求 return chain.proceed(request); } } }presenter包ShoppCarPersenter类public class ShoppCarPersenter implements IShoppCarPersenter{ IFragment02 iFragment02; ShoppCarModel shoppCarModel; public ShoppCarPersenter(IFragment02 iFragment02) { this.iFragment02 = iFragment02; shoppCarModel = new ShoppCarModel(); } @Override public void getCar(String uid) { shoppCarModel.getCar(uid,this); } @Override public void onSuccess(List<SupperClass.DataBean> list) { if (iFragment02!=null){ iFragment02.onSuccess(list); } } @Override public void onFailed(String str) { if (iFragment02!=null){ iFragment02.onFailed(str); } } @Override public void Destory() { if (iFragment02!=null){ iFragment02=null; } } }IShoppCarPersenter接口public interface IShoppCarPersenter { void getCar(String uid); void onSuccess(List<SupperClass.DataBean> list); void onFailed(String str); void Destory(); }model包ShoppCarModel类public class ShoppCarModel implements IShoppCarModel{ @Override public void getCar(String uid, final IShoppCarPersenter iShoppCarPersenter) { String url = "https://www.zhaoapi.cn/product/getCarts"; OkHttpUtils utils = new OkHttpUtils(); Map<String, String> map = new HashMap<>(); map.put("uid",uid); utils.doPost(url, map, new onFinish() { @Override public void onSuccess(Object o) { String result = o.toString(); Gson g = new Gson(); SupperClass supperClass = g.fromJson(result, SupperClass.class); List<SupperClass.DataBean> data = supperClass.getData(); iShoppCarPersenter.onSuccess(data); } @Override public void onFailed(String s) { iShoppCarPersenter.onFailed(s); } }); } }IShoppCarModel接口public interface IShoppCarModel { void getCar(String uid, IShoppCarPersenter iShoppCarPersenter); }fragment包fragment2类public class fragment2 extends Fragment implements IFragment02, MyExadpter.CheckGroupItemListener, MyExadpter.ModifyGoodsItemNumberListener, View.OnClickListener { private View view; /** * 返回 */ private TextView mBtnBack; /** * 编辑 */ private MyExadpter adapter; private TextView mBtnEditor; private ExpandableListView mElv; private FrameLayout mRealtabcontent; private View mSplit; private FrameLayout mTabcontent; private CustomFragmentTabHost mTabhost; //购买商品的总数量 private int totalNum = 0; //购买商品的总价 private double totalPrice = 0.00; //15.55 15 0.55亿 private ShoppCarPersenter iShooppPrensenter; // private boolean flag; private List<SupperClass.DataBean> list; /** * 全选 */ private CheckBox mBtnCheckAll; /** * 合计:¥0.00 */ private TextView mTvTotalPrice; /** * 结算(0) */ private TextView mBtnAmount; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment02, container, false); initView(view); mElv.setGroupIndicator(null); adapter = new MyExadpter(getActivity()); mElv.setAdapter(adapter); iShooppPrensenter = new ShoppCarPersenter(this); iShooppPrensenter.getCar("4582"); adapter.setModifyGoodsItemNumberListener(this); //设置商家以及商品是否被选中的监听 adapter.setCheckGroupItemListener(this); mBtnAmount.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getActivity(), MyDingDanActivity.class); statisticsPrice(); if (totalNum == 0) { Toast.makeText(getActivity(), "请选中", Toast.LENGTH_SHORT).show(); return; } else { intent.putExtra("uid", "4582"); intent.putExtra("price", totalPrice); startActivity(intent); } } }); mBtnCheckAll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { isChoosedAll(((CheckBox) view).isChecked()); //计算商品总价 statisticsPrice(); } }); return view; } private void defaultExpand(){ for (int i = 0; i < adapter.getGroupCount();++i){ mElv.expandGroup(i); } } @Override public void onSuccess(List<SupperClass.DataBean> list) { this.list = list; adapter.setList(list); defaultExpand(); } @Override public void onFailed(String str) { Toast.makeText(getActivity(),str.toString(),Toast.LENGTH_SHORT).show(); } @Override public void checkGroupItem(int groupPosition, boolean isChecked) { //商家javabean SupperClass.DataBean dataBean = list.get(groupPosition); dataBean.setGroupCheak(isChecked); //遍历商家里面的商品,将其置为选中状态 for (SupperClass.DataBean.ListBean listBean : dataBean.getList()){ listBean.setChild(isChecked); } //底部结算那个checkbox状态(全选) if(isCheckAll()){ mBtnCheckAll.setChecked(true); }else{ mBtnCheckAll.setChecked(false); } //刷新适配器 adapter.notifyDataSetChanged(); //计算价格 statisticsPrice(); } @Override public void checkChildItem(int groupPosition, int childPosition, boolean isChecked) { SupperClass.DataBean dataBean = list.get(groupPosition);//商家那一层 List<SupperClass.DataBean.ListBean> listBeans = dataBean.getList(); SupperClass.DataBean.ListBean listBean = listBeans.get(childPosition); //你点击商家的商品条目将其选中状态记录 listBean.setChild(isChecked); //检测商家里面的每一个商品是否被选中,如果被选中,返回boolean boolean result = isGoodsCheckAll(groupPosition); if(result){ dataBean.setGroupCheak(result); }else{ dataBean.setGroupCheak(result); } //底部结算那个checkbox状态(全选) if(isCheckAll()){ mBtnCheckAll.setChecked(true); }else{ mBtnCheckAll.setChecked(false); } //刷新适配器 adapter.notifyDataSetChanged(); //计算总价 statisticsPrice(); } @Override public void doIncrease(int groupPosition, int childPosition, View view) { SupperClass.DataBean.ListBean listBean = list.get(groupPosition).getList().get(childPosition); //取出当前的商品数量 int currentNum = listBean.getNum(); //商品++ currentNum++; //将商品数量设置javabean上 listBean.setNum(currentNum); //刷新适配器 adapter.notifyDataSetChanged(); //计算商品价格 statisticsPrice(); } private boolean isGoodsCheckAll(int groupPosition){ List<SupperClass.DataBean.ListBean> listBeans = this.list.get(groupPosition).getList(); //遍历某一个商家的每个商品是否被选中 for (SupperClass.DataBean.ListBean listBean : listBeans){ if(listBean.isChild()){//是选中状态 continue; }else{ return false; } } return true; } //购物车商品是否全部选中 private boolean isCheckAll(){ for (SupperClass.DataBean dataBean : list){ if(!dataBean.isGroupCheak()){ return false; } } return true; } //全选与反选 private void isChoosedAll(boolean isChecked){ for (SupperClass.DataBean dataBean : list){ dataBean.setGroupCheak(isChecked); for (SupperClass.DataBean.ListBean listBean : dataBean.getList()){ listBean.setChild(isChecked); } } //刷新适配器 adapter.notifyDataSetChanged(); } private void statisticsPrice(){ //初始化值 totalNum = 0; totalPrice = 0.00; for (SupperClass.DataBean dataBean : list){ for (SupperClass.DataBean.ListBean listBean : dataBean.getList()){ if(listBean.isChild()){ totalNum++; System.out.println("number : "+totalNum); totalPrice += listBean.getNum()*listBean.getPrice(); } } } //设置文本信息 合计、结算的商品数量 mTvTotalPrice.setText("合计:¥"+totalPrice); mBtnAmount.setText("结算("+totalNum+")"); } @Override public void doDecrease(int groupPosition, int childPosition, View view) { SupperClass.DataBean.ListBean listBean = list.get(groupPosition).getList().get(childPosition); //取出当前的商品数量 int currentNum = listBean.getNum(); //直接结束这个方法 if(currentNum == 1){ return; } currentNum--; listBean.setNum(currentNum); //刷新适配器 adapter.notifyDataSetChanged(); //计算商品价格 statisticsPrice(); } private void initView(View view) { mBtnBack = (TextView) view.findViewById(R.id.btnBack); mBtnEditor = (TextView) view.findViewById(R.id.btnEditor); mElv = (ExpandableListView) view.findViewById(R.id.elv); mRealtabcontent = (FrameLayout) view.findViewById(R.id.realtabcontent); mSplit = (View) view.findViewById(R.id.split); mBtnBack.setOnClickListener(this); mBtnEditor.setOnClickListener(this); mBtnCheckAll = (CheckBox) view.findViewById(R.id.btnCheckAll); mTvTotalPrice = (TextView) view.findViewById(R.id.tvTotalPrice); mBtnAmount = (TextView) view.findViewById(R.id.btnAmount); } @Override public void onClick(View v) { switch (v.getId()) { default: break; // case R.id.btnBack: // break; case R.id.btnEditor: break; case R.id.elv: break; } } }IFragment02接口public interface IFragment02 { void onSuccess(List<SupperClass.DataBean> list); void onFailed(String str); }bean包Constants类public class Constants { //请求的服务器主机名 public static final String HOST_NAME = "https://www.zhaoapi.cn"; /** * 登录请求接口 */ public static final String LOGIN = HOST_NAME + "/user/login"; /** * 获取购物车信息 */ public static final String GET_CARTS = HOST_NAME + "/product/getCarts"; }SupperClass类public class SupperClass { /** * msg : 请求成功 * code : 0 * data : [{"list":[{"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手机"},{"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":1,"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"}],"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手机"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/5025518.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t8830/106/1760940277/195595/5cf9412f/59bf2ef5N5ab7dc16.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5428/70/1520969931/274676/b644dd0d/591128e7Nd2f70da0.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5566/365/1519564203/36911/620c750c/591128eaN54ac3363.jpg!q70.jpg","num":1,"pid":58,"price":6399,"pscid":40,"selected":0,"sellerid":2,"subhead":"升级4G大显存!Nvme协议Pcie SSD,速度快人一步】GTX1050Ti就选拯救者!专业游戏键盘&新模具全新设计!","title":"联想(Lenovo)拯救者R720 15.6英寸游戏笔记本电脑(i5-7300HQ 8G 1T+128G SSD GTX1050Ti 4G IPS 黑)"}],"sellerName":"商家2","sellerid":"2"},{"list":[{"bargainPrice":22.9,"createtime":"2017-10-03T23:53:28","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":28,"price":599,"pscid":2,"selected":0,"sellerid":5,"subhead":"三只松鼠零食特惠,专区满99减50,满199减100,火速抢购》","title":"三只松鼠 坚果炒货 零食奶油味 碧根果225g/袋"}],"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":4,"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":111.99,"createtime":"2017-10-03T23:53:28","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":21,"price":699,"pscid":1,"selected":0,"sellerid":14,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}],"sellerName":"商家14","sellerid":"14"},{"list":[{"bargainPrice":22.9,"createtime":"2017-10-03T23:53:28","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":40,"price":345,"pscid":2,"selected":0,"sellerid":17,"subhead":"三只松鼠零食特惠,专区满99减50,满199减100,火速抢购》","title":"三只松鼠 坚果炒货 零食奶油味 碧根果225g/袋"}],"sellerName":"商家17","sellerid":"17"}] */ 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":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手机"},{"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":1,"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"}] * sellerName : 商家1 * sellerid : 1 */ private String sellerName; private String sellerid; private List<ListBean> list; private boolean isGroupCheak; public boolean isGroupCheak() { return isGroupCheak; } public void setGroupCheak(boolean groupCheak) { isGroupCheak = groupCheak; } 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 : 99.0 * 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.0 * pscid : 39 * selected : 0 * sellerid : 1 * subhead : 高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽! * title : 一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机 */ // 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 boolean isChild; public boolean isChild() { return isChild; } public void setChild(boolean child) { this.isChild = child; } /*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; } } }}adapter包public class MyExadpter extends BaseExpandableListAdapter{ private List<SupperClass.DataBean> list; private Context context; private CheckBox ck_group_choose; private ModifyGoodsItemNumberListener modifyGoodsItemNumberListener; private CheckGroupItemListener checkGroupItemListener; private boolean isEditor; public MyExadpter(Context context){ this.context = context; } //设置数据 public void setList(List<SupperClass.DataBean> data){ this.list = data; notifyDataSetChanged(); } //商家以及商品是否被选中的一个监听 public void setCheckGroupItemListener(CheckGroupItemListener checkGroupItemListener){ this.checkGroupItemListener = checkGroupItemListener; } //设置商品的加减监听 public void setModifyGoodsItemNumberListener(ModifyGoodsItemNumberListener modifyGoodsItemNumberListener){ this.modifyGoodsItemNumberListener = modifyGoodsItemNumberListener; } //是否显示删除按钮 public void showDeleteButton(boolean isEditor){ this.isEditor = isEditor; //刷新适配器 notifyDataSetChanged(); } @Override public int getGroupCount() { return list!=null?list.size():0; } @Override public int getChildrenCount(int groupPosition) { return list!=null?list.get(groupPosition).getList().size():0; } @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 false; } @Override public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if (convertView==null){ convertView = LayoutInflater.from(context).inflate(R.layout.layout_group_item,parent,false); } ck_group_choose = convertView.findViewById(R.id.ck_group_choosed); //设置商家checkbox复选框的状态 if(list.get(groupPosition).isGroupCheak()){ ck_group_choose.setChecked(true); }else{ ck_group_choose.setChecked(false); } ck_group_choose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { checkGroupItemListener.checkGroupItem(groupPosition,((CheckBox)view).isChecked()); } }); //赋值 ck_group_choose.setText(list.get(groupPosition).getSellerName()); return convertView; } @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { if(convertView == null){ convertView = LayoutInflater.from(context).inflate(R.layout.layout_child_item,parent,false); } //商品选择 CheckBox ck_child_choosed = convertView.findViewById(R.id.ck_child_choose); //商品图片 ImageView iv_show_pic = convertView.findViewById(R.id.iv_show_pic); //商品主标题 TextView tv_commodity_name = convertView.findViewById(R.id.tv_commodity_name); //商品副标题 TextView tv_commodity_attr = convertView.findViewById(R.id.tv_commodity_attr); //商品价格 TextView tv_commodity_price = convertView.findViewById(R.id.tv_commodity_price); //商品数量 TextView tv_commodity_num = convertView.findViewById(R.id.tv_commodity_num); //商品减 TextView iv_sub = convertView.findViewById(R.id.iv_sub); //商品加减中的数量变化 final TextView tv_commodity_show_num = convertView.findViewById(R.id.tv_commodity_show_num); //商品加 TextView iv_add = convertView.findViewById(R.id.iv_add); //删除按钮 Button btn_commodity_delete = convertView.findViewById(R.id.btn_commodity_delete); //设置文本信息 tv_commodity_name.setText(list.get(groupPosition).getList().get(childPosition).getTitle()); tv_commodity_attr.setText(list.get(groupPosition).getList().get(childPosition).getSubhead()); tv_commodity_price.setText("¥"+list.get(groupPosition).getList().get(childPosition).getPrice()); tv_commodity_num.setText("x"+list.get(groupPosition).getList().get(childPosition).getNum()); tv_commodity_show_num.setText(list.get(groupPosition).getList().get(childPosition).getNum()+""); //分割图片地址 String images = list.get(groupPosition).getList().get(childPosition).getImages(); String[] urls = images.split("\\|"); //加载商品图片 Glide.with(context) .load(urls[0]) .crossFade() .into(iv_show_pic); //商品加 iv_add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { modifyGoodsItemNumberListener.doIncrease(groupPosition,childPosition,tv_commodity_show_num); } }); //设置商品加减的按钮 //商品减 iv_sub.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { modifyGoodsItemNumberListener.doDecrease(groupPosition,childPosition,tv_commodity_show_num); } }); //商品复选框是否被选中 ck_child_choosed.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //isChecked false true checkGroupItemListener.checkChildItem(groupPosition,childPosition,((CheckBox)view).isChecked()); } }); //处理商品的选中状态 if(list.get(groupPosition).getList().get(childPosition).isChild()){ ck_child_choosed.setChecked(true); }else{ ck_child_choosed.setChecked(false); } //控制删除按钮的隐藏与显示 if(isEditor){ btn_commodity_delete.setVisibility(View.VISIBLE); }else{ btn_commodity_delete.setVisibility(View.GONE); } return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return false; } public interface CheckGroupItemListener{ //商家的条目的复选框监听 void checkGroupItem(int groupPosition,boolean isChecked); //商品的 void checkChildItem(int groupPosition,int childPosition,boolean isChecked); } /** * 商品加减接口 */ public interface ModifyGoodsItemNumberListener{ //商品添加操作 void doIncrease(int groupPosition,int childPosition,View view); //商品减少操作 void doDecrease(int groupPosition,int childPosition,View view); } }