购物车

布局

<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":"三只松鼠零食特惠,专区满9950,满199100,火速抢购》","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 苹果笔记本电脑 银色VP213英寸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":"三只松鼠零食特惠,专区满9950,满199100,火速抢购》","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);

    }
}

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值