ok架构,gson解析,glide图片解析,eventbus传值购物车







依赖:

compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'org.greenrobot:eventbus:3.1.1'

接口:

购物车接口:http://120.27.23.105/product/getCarts?uid=100&source=android

添加属性 Bean文件中,一级列表和二级列表的选中状态
private boolean checked;
private boolean child;


activity_main.xml

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="bwie.com.shopping_cart.MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:text="购物车"
        android:textColor="#ff3660"
        android:textSize="25sp" />

    <ExpandableListView
        android:id="@+id/elv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:background="@android:color/white"
        android:gravity="center_vertical">

        <CheckBox
            android:id="@+id/checkbox2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:focusable="false" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@+id/checkbox2"
            android:gravity="center_vertical"
            android:text="全选"
            android:textSize="20sp" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:orientation="horizontal">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="合计 :" />


            <TextView
                android:id="@+id/tv_price"
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:layout_marginLeft="10dp"
                android:paddingRight="10dp"
                android:text="0"
                android:textColor="@android:color/holo_red_light" />


            <TextView
                android:id="@+id/tv_num"
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:background="@android:color/holo_red_dark"
                android:gravity="center"
                android:padding="10dp"
                android:text="结算(0)"
                android:textColor="@android:color/white" />
        </LinearLayout>
    </RelativeLayout>

</LinearLayout>

item_child_market.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="20dp"
        android:orientation="horizontal"
        android:gravity="center"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true">

        <CheckBox
            android:id="@+id/cb_child"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:focusable="false" />

        <ImageView
            android:id="@+id/img_icon"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@mipmap/ic_launcher" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:orientation="vertical">

            <TextView
                android:id="@+id/tv_tel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="20sp"
                android:textStyle="bold"
                android:singleLine="true"
                android:text="iphone6" />

            <TextView
                android:id="@+id/tv_pri"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:textSize="18sp"
                android:text="¥3000.00"
                android:textColor="#f00" />

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:gravity="center_vertical">

                <ImageView
                    android:id="@+id/iv_del"
                    android:layout_width="25dp"
                    android:layout_height="25dp"
                    android:src="@drawable/jian" />

                <TextView
                    android:id="@+id/tv_num"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dp"
                    android:background="#00ff44"
                    android:paddingBottom="2dp"
                    android:paddingLeft="20dp"
                    android:paddingRight="20dp"
                    android:paddingTop="2dp"
                    android:text="1"
                    android:textSize="20sp" />

                <ImageView
                    android:id="@+id/iv_add"
                    android:layout_width="25dp"
                    android:layout_height="25dp"
                    android:layout_marginLeft="5dp"
                    android:src="@drawable/jia" />

            </LinearLayout>
        </LinearLayout>
    </LinearLayout>

    <TextView
        android:id="@+id/tv_del"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:text="删除"
        android:background="#ffdd00"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp"
        android:layout_marginTop="25dp"
        android:layout_centerVertical="true"
        android:gravity="center" />

</RelativeLayout>
item_parent_market.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:layout_height="wrap_content">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/white" >
    <CheckBox
        android:id="@+id/cb_parent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="4dp"
        android:checkMark="?android:attr/listChoiceIndicatorMultiple"
        android:gravity="center"
        android:minHeight="38dp"
        android:minWidth="32dp"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:visibility="visible" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginLeft="50dp">
        <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@drawable/shichang"
            android:layout_gravity="center"/>

        <TextView
            android:id="@+id/tv_number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginBottom="10dp"
            android:layout_marginTop="10dp"
            android:layout_toRightOf="@id/cb_parent"
            android:background="@android:color/white"
            android:drawablePadding="10dp"
            android:text="第八号当铺"
            android:textColor="#666666"
            android:textSize="18sp" />

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_gravity="center"
            android:src="@drawable/fanhui" />
    </LinearLayout>
    <Button
        android:id="@+id/tv_store_edtor"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="4dp"
        android:background="@null"
        android:text="编辑"
        android:textSize="18sp"
        />
    </RelativeLayout>
</LinearLayout>

GsonUtils
package bwie.com.shopping_cart.HttpUtlis;

import com.google.gson.Gson;

/**
 * Created by 高俊生 on 2017/12/15.
 */

public class GsonUtils {
    // 请求成功之后做解析,通过自己的回调接口将数据返回回去
    //Gson解析数据,并等着被调用返回
    private static Gson instance;
    private GsonUtils(){}
    public static Gson getInstance(){
        if (instance == null){
            instance = new Gson();
        }
        return instance;
    }
}

HttpUtils

package bwie.com.shopping_cart.HttpUtlis;

import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;

import java.io.IOException;
import java.util.Map;

import bwie.com.shopping_cart.CallBack.CallBack;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

/**
 * Created by 高俊生 on 2017/12/15.
 */

public class HttpUtils {
    private static final String TAG = "HttpUtils";

    private static volatile HttpUtils instence;
    //创建一个Handler
    private static Handler handler = new Handler();

    public HttpUtils(){

    }

    //单例模式
    public static HttpUtils getInstence(){
        if (null == instence){
            synchronized (HttpUtils.class){
                if (instence == null){
                    instence = new HttpUtils();
                }
            }
        }
        return instence;
    }

//    /**
//     * Get请求
//     *
//     * @param url
//     * @param map
//     * @param callBack
//     * @param cls
//     * @param tag
//     */
    //请求数据
    public void get(String url, Map<String,String> map, final CallBack callBack,final Class cls,final String tag){
        if (TextUtils.isEmpty(url)){
            return;
        }

        //字符串变量,它的对象是可以扩充和修改的。
        StringBuffer sb = new StringBuffer();
        sb.append(url);
        //--------------------3种类型的字符串-----------------------------------
        // http://www.baoidu.com/login?mobile=11111&password=11111&age=1&name=zw
        // 1.http://www.baoidu.com/login                --------? key=value&key=value
        // 2.http://www.baoidu.com/login?               --------- key=value&key=value
        // 3.http://www.baoidu.com/login?mobile=11111   -----&key=value&key=value

        // 如果包含?说明是2.3类型
        //contains:包含
        if (url.contains("?")) {
            // 如果包含?并且?是最后一位,对应是2类型
            if (url.indexOf("?") == url.length() - 1){
            }else {
                // 如果包含?并且?不是最后一位,对应是3类型
                sb.append("&");
            }
        }else {
            //不包含?,对应的1类型
            sb.append("?");
        }
        // 遍历map集合进行拼接,拼接的形式是 key=value&
        for (Map.Entry<String ,String> entry : map.entrySet()){
            sb.append(entry.getKey())
                    .append("=")
                    .append(entry.getValue())
                    .append("&");
        }
        // 如果存在&号,把最后一个&去掉
        if (sb.indexOf("&") != -1){
            sb.deleteCharAt(sb.lastIndexOf("&"));
        }
        //打印一下接口
        Log.i(TAG,"++++++++++get url:" +sb);

        OkHttpClient client = new OkHttpClient();
        //对象是有关于客户端所发出的请求的对象,只要是有关于客户端请求的信息,都可以藉由它来取得
        final Request request = new Request.Builder()
                .get()
                .url(sb.toString())
                .build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        // 通过自己传进来的回调接口对象回传回去
                        callBack.onFailed(tag,e);
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String result = response.body().string();
                // 请求成功之后做解析,通过自己的回调接口将数据返回回去
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        Object o;
                        if (TextUtils.isEmpty(result)){
                            o = null;
                        }else {
                            o = GsonUtils.getInstance().fromJson(result,cls);
                        }
                        callBack.onSeccess(tag,o);
                    }
                });

            }
        });
    }
}

MessageEvent

package bwie.com.shopping_cart.EventBus;

/**
 * Created by 高俊生 on 2017/12/15.
 */

public class MessageEvent {
    private boolean checked;

    //判断
    public boolean isChecked(){
        return checked;
    }

    public void setChecked(boolean checked){
        this.checked = checked;
    }


}

PriceAndCountEvent

package bwie.com.shopping_cart.EventBus;

/**
 * Created by 高俊生 on 2017/12/15.
 */

public class PriceAndCountEvent {


    //创建两个变量,价格和数量
    private int price;
    private int count;

    public int getPrice() {
        return price;
    }

    public int getCount() {
        return count;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public void setCount(int count) {
        this.count = count;
    }
}

CallBack

package bwie.com.shopping_cart.CallBack;

/**
 * Created by 高俊生 on 2017/12/15.
 */

public interface CallBack {
    void onFailed(String tag,Exception e);
    void onSeccess(String tag,Object o);
}

CartCallBack

package bwie.com.shopping_cart.CallBack;

import java.util.List;

import bwie.com.shopping_cart.Bean.CartBean;

/**
 * Created by 高俊生 on 2017/12/15.
 */

public interface CartCallBack {
    void seccess(String tsg, List<CartBean.DataBean> news);//一级列表商家全部信息
    void failed(String tab,Exception e);
}

CartBean//可自己读取Bean包

package bwie.com.shopping_cart.Bean;

import java.util.List;

/**
 * Created by 高俊生 on 2017/12/15.
 */

public class CartBean {


    /**
     * msg : 请求成功
     * code : 0
     * data : [{"list":[{"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":4,"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":5599,"createtime":"2017-10-10T17:30:32","detailUrl":"https://item.m.jd.com/product/4824715.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n12/jfs/t7768/184/1153704394/148460/f42e1432/599a930fN8a85626b.jpg!q70.jpg","num":2,"pid":59,"price":5599,"pscid":40,"selected":0,"sellerid":3,"subhead":"游戏本选择4G独显,拒绝掉帧】升级版IPS全高清防眩光显示屏,WASD方向键颜色加持,三大出风口立体散热!","title":"戴尔DELL灵越游匣15PR-6648B GTX1050 15.6英寸游戏笔记本电脑(i5-7300HQ 8G 128GSSD+1T 4G独显 IPS)黑"}],"sellerName":"商家3","sellerid":"3"},{"list":[{"bargainPrice":11800,"createtime":"2017-10-14T21:48:08","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":2,"pid":60,"price":13888,"pscid":40,"selected":0,"sellerid":4,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"}],"sellerName":"商家4","sellerid":"4"},{"list":[{"bargainPrice":11800,"createtime":"2017-10-03T23:43:53","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":64,"price":11000,"pscid":40,"selected":0,"sellerid":8,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"}],"sellerName":"商家8","sellerid":"8"}]
     */

    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":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":4,"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 checked;

        public boolean isChecked() {
            return checked;
        }

        public void setChecked(boolean checked) {
            this.checked = checked;
        }

        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 : 11800.0
             * 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 : 4
             * pid : 57
             * price : 5199.0
             * 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)银

             */

            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 child;


            public boolean isChild() {
                return child;
            }

            public void setChild(boolean child) {
                this.child = 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;
            }
        }
    }
}

CartPresenter

package bwie.com.shopping_cart.Presenter;

import android.util.Log;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import bwie.com.shopping_cart.Bean.CartBean;
import bwie.com.shopping_cart.CallBack.CallBack;
import bwie.com.shopping_cart.CallBack.CartCallBack;
import bwie.com.shopping_cart.HttpUtlis.HttpUtils;

/**
 * Created by 高俊生 on 2017/12/15.
 */

public class CartPresenter {
    private CartCallBack inv;

    public CartPresenter(CartCallBack inv) {
        this.inv = inv;
    }

    public void getNews(){
        //type=top&key=dbedecbcd1899c9785b95cc2d17131c5
        Map<String ,String> map = new HashMap<>();
        // map.put("cid", "1");
        // map.put("key", "dbedecbcd1899c9785b95cc2d17131c5");
        HttpUtils.getInstence().get("http://120.27.23.105/product/getCarts?uid=100&source=android", map, new CallBack() {
            @Override
            public void onFailed(String tag, Exception e) {
                inv.failed(tag,e);
            }

            @Override
            public void onSeccess(String tag, Object o) {
                CartBean bean = (CartBean) o;
                Log.v("tag",bean.getMsg());
                if (bean != null){
                    List<CartBean.DataBean> data = bean.getData();
                    inv.seccess(tag,data);
                    Log.i("zzzzzzzzzzzzzz","onSeccess()内容;" + data.toString());
                }
            }
        },CartBean.class, "news");

    }

    //释放占用
    public void detachView(){
        if (inv != null){
            inv =null;
        }
    }

}

MyAdapter

package bwie.com.shopping_cart.Adapter;

import android.content.Context;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;

import org.greenrobot.eventbus.EventBus;

import java.util.List;

import bwie.com.shopping_cart.Bean.CartBean;
import bwie.com.shopping_cart.EventBus.PriceAndCountEvent;
import bwie.com.shopping_cart.R;

/**
 * Created by 高俊生 on 2017/12/15.
 */

public class MyAdapter extends BaseExpandableListAdapter{

    private Context context;
    private List<CartBean.DataBean>  list;//父类集合

    public MyAdapter(Context context, List<CartBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }


    @Override
    public int getGroupCount() {
        return list.size();
    }

    @Override
    public int getChildrenCount(int i) {
        return list.get(i).getList().size();
    }

    @Override
    public Object getGroup(int i) {
        return list.get(i);
    }

    @Override
    public Object getChild(int i, int i1) {
        return list.get(i).getList().get(i1);
    }

    @Override
    public long getGroupId(int i) {
        return i;
    }

    @Override
    public long getChildId(int i, int i1) {
        return i1;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) {
        final GroupViewHolder holder;
        if (view == null) {
            holder = new GroupViewHolder();
            view = view.inflate(context, R.layout.item_parent_market, null);
            holder.cbGroup = (CheckBox) view.findViewById(R.id.cb_parent);
            holder.tv_number = (TextView) view.findViewById(R.id.tv_number);
            view.setTag(holder);
        } else {
            holder = (GroupViewHolder) view.getTag();
        }
        final CartBean.DataBean dataBean = list.get(i);
        holder.cbGroup.setChecked(dataBean.isChecked());
        holder.tv_number.setText(dataBean.getSellerName());
        //一级列表复选框点击按钮
        holder.cbGroup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //点击改变状态值
                dataBean.setChecked(holder.cbGroup.isChecked());
                //通过一级的是否勾选,改变二级CheckBox状态
                changeChildCbState(i, holder.cbGroup.isChecked());
                EventBus.getDefault().post(compute());
                //通过判断是否全选,改变全选的状态
                changeAllCbState(isAllGroupCbSelected());
                notifyDataSetChanged();
            }
        });

        return view;
    }

    @Override
    public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) {
        final ChildViewHolder holder;
        if (view == null) {
            holder = new ChildViewHolder();
            view = view.inflate(context,R.layout.item_child_market, null);
            holder.cbChild = (CheckBox) view.findViewById(R.id.cb_child);//二级复选框
            holder.tv_tel = (TextView) view.findViewById(R.id.tv_tel);//简介
            holder.imgIcon = (ImageView) view.findViewById(R.id.img_icon);//图片
            holder.tv_price = (TextView) view.findViewById(R.id.tv_pri);//价格
            holder.tv_del = (TextView) view.findViewById(R.id.tv_del);//减
            holder.iv_del = (ImageView) view.findViewById(R.id.iv_del);
            holder.iv_add = (ImageView) view.findViewById(R.id.iv_add);//加
            holder.tv_num = (TextView) view.findViewById(R.id.tv_num);//加减器
            view.setTag(holder);
        } else {
            holder = (ChildViewHolder) view.getTag();
        }
        final CartBean.DataBean.ListBean datasBean = list.get(i).getList().get(i1);
//----------------------------------------------------------------------------------------
        holder.cbChild.setChecked(datasBean.isChild());
        holder.tv_tel.setText(datasBean.getTitle());
        holder.tv_price.setText("¥"+datasBean.getPrice() );
        holder.tv_num.setText(datasBean.getNum() + "");
        String images = datasBean.getImages().trim();
        String[] split = images.split("[|]");
        Glide.with(context).load(split[0]).into(holder.imgIcon);

        //二级checkbox
        holder.cbChild.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //设置该条目对象里的checked属性值
                datasBean.setChild(holder.cbChild.isChecked());
                PriceAndCountEvent priceAndCountEvent = compute();
                EventBus.getDefault().post(priceAndCountEvent);

                if (holder.cbChild.isChecked()) {
                    //当前checkbox是选中状态
                    if (isAllChildCbSelected(i)) {
                        changGroupCbState(i, true);
                        changeAllCbState(isAllGroupCbSelected());
                    }
                } else {
                    changGroupCbState(i, false);
                    changeAllCbState(isAllGroupCbSelected());
                }
                notifyDataSetChanged();
            }
        });

        //减号
        holder.iv_del.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int num = datasBean.getNum();
                if (num == 1) {

                    return;
                }
                //给控件赋值
                holder.tv_num.setText(--num + "");
                //给控件赋值以后在赋值给控件本身
                datasBean.setNum(num);
                //当点击选中Checkbox的时候
                if (holder.cbChild.isChecked()) {
                    //进行计算赋值传递给主MainActivity进行显示
                    EventBus.getDefault().postSticky(compute());
                }
                notifyDataSetChanged();
            }
        });
        //加号
        holder.iv_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int num = datasBean.getNum();
                holder.tv_num.setText(++num + "");
                datasBean.setNum(num);
                if (holder.cbChild.isChecked()) {
                    EventBus.getDefault().post(compute());
                }
            }
        });
        //删除
        holder.tv_del.setOnClickListener(new View.OnClickListener() {
            private AlertDialog dialog;
            @Override
            public void onClick(View v) {
                final List<CartBean.DataBean.ListBean> datasBeen = list.get(i).getList();
                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                builder.setTitle("提示");
                builder.setMessage("确认是否删除?");
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int ii) {
                        datasBeen.remove(i1);
                        list.remove(i);

                        EventBus.getDefault().post(compute());
                        notifyDataSetChanged();
                    }
                });
                builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialog.dismiss();
                    }
                });
                dialog = builder.create();
                dialog.show();
            }
        });
        return view;
    }

    @Override
    public boolean isChildSelectable(int i, int i1) {
        return false;
    }

    class GroupViewHolder {
        CheckBox cbGroup;
        TextView tv_number;
    }
    class ChildViewHolder {
        CheckBox cbChild;
        TextView tv_tel;
        ImageView imgIcon;
        TextView tv_price;
        TextView tv_del;
        ImageView iv_del;
        ImageView iv_add;
        TextView tv_num;
    }
    /**
     * 改变全选的状态
     *
     * @param flag
     */
    private void changeAllCbState(boolean flag) {
//        MessageEvent messageEvent = new MessageEvent();
//        messageEvent.setChecked(flag);
//        EventBus.getDefault().post(messageEvent);
        EventBus.getDefault().postSticky(flag);//将获取的布尔值发送出去
    }
    /**
     * 改变一级列表checkbox状态
     *
     * @param groupPosition
     */
    private void changGroupCbState(int groupPosition, boolean flag) {
        CartBean.DataBean dataBean = list.get(groupPosition);

        dataBean.setChecked(flag);
    }
    /**
     * 改变二级列表checkbox状态
     *
     * @param groupPosition
     * @param flag
     */
    private void changeChildCbState(int groupPosition, boolean flag) {
        List<CartBean.DataBean.ListBean> datasBeen =  this.list.get(groupPosition).getList();
        for (int j = 0; j < datasBeen.size(); j++) {
            datasBeen.get(j).setChild(flag);
        }
    }
    /**
     * 判断一级列表是否全部选中
     *
     * @return
     */
    private boolean isAllGroupCbSelected() {
        for (int i = 0; i < list.size(); i++) {
            boolean b = list.get(i).isChecked();
            if (b) {
                return false;
            }
        }
        return true;
    }
    /**
     * 判断二级列表是否全部选中
     *
     * @param groupPosition
     * @return
     */
    private boolean isAllChildCbSelected(int groupPosition) {
        List<CartBean.DataBean.ListBean> datasBeen = list.get(groupPosition).getList();

        for (int i = 0; i < datasBeen.size(); i++) {
            CartBean.DataBean.ListBean datasBean = datasBeen.get(i);

            if (!datasBean.isChild()) {
                return false;
            }
        }
        return true;
    }

    /**
     * 计算列表中,选中的钱和数量
     */
    private PriceAndCountEvent compute() {
        int count = 0;
        int price = 0;
        for (int i = 0; i < list.size(); i++) {
            CartBean.DataBean datasBeen = list.get(i);
            List<CartBean.DataBean.ListBean> datas = datasBeen.getList();
            for (int j = 0; j < datas.size(); j++) {
                CartBean.DataBean.ListBean datasBean = datas.get(j);

                if (datasBean.isChild()) {
                    price += datasBean.getNum() * datasBean.getPrice();
                    count += datasBean.getNum();
                }
            }
        }
        PriceAndCountEvent priceAndCountEvent = new PriceAndCountEvent();
        priceAndCountEvent.setCount(count);
        priceAndCountEvent.setPrice(price);
        return priceAndCountEvent;
    }

    /**
     * 设置全选、反选
     *
     * @param flag
     */
    public void changeAllListCbState(boolean flag) {
        for (int i = 0; i < list.size(); i++) {
            CartBean.DataBean dataBean = list.get(i);
            dataBean.setChecked(flag);
            List<CartBean.DataBean.ListBean> datas = dataBean.getList();
            for (int j = 0; j < datas.size(); j++) {
                CartBean.DataBean.ListBean listBean = datas.get(j);
                listBean.setChild(flag);

            }
        }
        EventBus.getDefault().post(compute());
        notifyDataSetChanged();
    }

}

MainActivity

package bwie.com.shopping_cart;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.TextView;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;

import java.util.ArrayList;
import java.util.List;

import bwie.com.shopping_cart.Adapter.MyAdapter;
import bwie.com.shopping_cart.Bean.CartBean;
import bwie.com.shopping_cart.CallBack.CartCallBack;
import bwie.com.shopping_cart.EventBus.MessageEvent;
import bwie.com.shopping_cart.EventBus.PriceAndCountEvent;
import bwie.com.shopping_cart.Presenter.CartPresenter;

public class MainActivity extends AppCompatActivity implements CartCallBack{
    private List<CartBean.DataBean> groupList = new ArrayList<>();
    private ExpandableListView mElv;
    private CheckBox mCheckbox2;
    /**
     * 0
     */
    private TextView mTvPrice;
    /**
     * 结算(0)
     */
    private TextView mTvNum;
    private MyAdapter adapter;
    private CartPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
        presenter = new CartPresenter(this);
        presenter.getNews();
        adapter = new MyAdapter(this,groupList);
        mElv.setAdapter(adapter);

        mCheckbox2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                adapter.changeAllListCbState(mCheckbox2.isChecked());
            }
        });
    }

    private void initView() {
        mElv = (ExpandableListView) findViewById(R.id.elv);
        mCheckbox2 = (CheckBox) findViewById(R.id.checkbox2);
        mTvPrice = (TextView) findViewById(R.id.tv_price);
        mTvNum = (TextView) findViewById(R.id.tv_num);
    }

    @Override
    public void seccess(String tsg, List<CartBean.DataBean> news) {
        groupList.addAll(news);
        Log.v("tag",news.get(1).getSellerName()+"hgfh");
        for (int i = 0; i < news.size(); i++) {
            final CartBean.DataBean dataBean = news.get(i);

            List<CartBean.DataBean.ListBean> datas = news.get(i).getList();

//            groupList.get(i).getList().add((CartBean.DataBean.ListBean) datas);
        }
        adapter.notifyDataSetChanged();
        mElv.setGroupIndicator(null);
        for (int i=0;i<groupList.size();i++){
            mElv.expandGroup(i);
        }
    }

    @Override
    public void failed(String tab, Exception e) {

    }
    @Override
    protected void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }
    @Subscribe
    public void onMessageEvent(MessageEvent event) {
        mCheckbox2.setChecked(event.isChecked());
    }
    @Subscribe
    public void onMessageEvent(PriceAndCountEvent event) {
        mTvNum.setText("结算(" + event.getCount() + ")");
        mTvPrice.setText("¥"+event.getPrice() );
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
        if (presenter != null) {
            presenter.detachView();
        }
    }
}





























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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值