RXjava+Retrofit二级购物车

//依赖

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "com.example.a123.zhoukao2"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile 'io.reactivex.rxjava2:rxjava:2.1.1'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'com.squareup.retrofit2:retrofit:2.0.0'
    compile 'com.squareup.retrofit2:converter-gson:2.0.2'//解析使用
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'//与RxJava结合时使用
    compile 'com.android.support:recyclerview-v7:26.+'
    compile 'com.facebook.fresco:fresco:1.3.0'
    compile 'com.squareup.okhttp3:okhttp:3.9.0'
}

//AndroidManifest.xml


<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.a123.zhoukao2">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

    <application  android:name=".App" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            intent-filter>
        activity>
    application>

manifest>

//activity_main.xml


<RelativeLayout  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" tools:context="com.example.a123.zhoukao2.MainActivity">

    <LinearLayout  android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_above="@+id/linearLayout">
        <ExpandableListView  android:layout_width="match_parent" android:layout_height="match_parent" android:groupIndicator="@null" android:id="@+id/ev">
        ExpandableListView>
    LinearLayout>

    <LinearLayout  android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/linearLayout">
        <CheckBox  android:layout_width="0dp" android:text="全选" android:layout_weight="1" android:checked="true" android:layout_height="wrap_content" android:id="@+id/cb_all"/>
        <TextView  android:layout_width="0dp" android:gravity="right" android:layout_weight="1" android:layout_height="wrap_content" android:text="总价:" />
        <TextView  android:layout_width="0dp" android:layout_marginRight="10dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="0.0" android:id="@+id/text_sum"/>
        <Button  android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="删除" android:id="@+id/btn_del"/>
    LinearLayout>

RelativeLayout>

//view_add.xml


<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
    <ImageView  android:src="@drawable/down" android:layout_width="25dp" android:layout_height="25dp" android:id="@+id/delete"/>
    <View  android:id="@+id/view" android:layout_width="20dp" android:layout_height="1dp" android:layout_marginTop="2dp" android:background="#5c595c" android:layout_toRightOf="@id/delete"/>
    <TextView  android:id="@+id/count" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1" android:layout_toRightOf="@id/delete" android:layout_marginTop="5dp" android:layout_marginLeft="5dp"/>
    <View  android:layout_width="20dp" android:layout_height="1dp" android:background="#5c595c" android:layout_toRightOf="@id/delete" android:layout_marginTop="23dp"/>
    <ImageView  android:id="@+id/add" android:src="@drawable/up" android:layout_width="25dp" android:layout_height="25dp" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/view" android:layout_toEndOf="@+id/view" />
RelativeLayout>

//view_child.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" xmlns:Fresco="http://schemas.android.com/apk/res-auto">
    <LinearLayout  android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal">
        <CheckBox  android:id="@+id/cb_child" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginTop="35dp" />

        <com.facebook.drawee.view.SimpleDraweeView  android:id="@+id/child_img" android:layout_width="100dp" android:layout_height="100dp" Fresco:placeholderImage="@mipmap/ic_launcher_round" Fresco:failureImage="@mipmap/ic_launcher_round" />
        <LinearLayout  android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
            <TextView  android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:text="xxx" android:id="@+id/child_tit"/>
            <LinearLayout  android:layout_marginTop="10dp" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal">
                <TextView  android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="xxx" android:id="@+id/child_price"/>
               <com.example.a123.zhoukao2.view.AddView  android:id="@+id/addview" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content">

               com.example.a123.zhoukao2.view.AddView>
            LinearLayout>
        LinearLayout>
    LinearLayout>
LinearLayout>

//view_father.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent">
    <LinearLayout  android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal">
        <CheckBox  android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:id="@+id/cb_father_car"/>
        <TextView  android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="xxx" android:id="@+id/title_father_car"/>
    LinearLayout>
LinearLayout>

//CarAdapter

package com.example.a123.zhoukao2.adaper;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;

import com.example.a123.zhoukao2.MainActivity;
import com.example.a123.zhoukao2.R;
import com.example.a123.zhoukao2.bean.childBean;
import com.example.a123.zhoukao2.bean.fatherBean;
import com.example.a123.zhoukao2.view.AddView;
import com.facebook.drawee.view.SimpleDraweeView;

import java.util.List;

/** * Created by 123 on 2018/1/6. */

public class CarAdapter extends BaseExpandableListAdapter {
    private Context context;
    private List list;
    private List> lists;
    private MainActivity f;

    public CarAdapter(Context context, List list, List> lists,MainActivity f) {
        this.context = context;
        this.list = list;
        this.lists = lists;
        this.f=f;
    }

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

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

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

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

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

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

    @Override
    public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) {
        final fatherBean fatherbean = list.get(i);
        final List childbeen = lists.get(i);
        view = View.inflate(this.context, R.layout.view_father, null);
        TextView textView = (TextView) view.findViewById(R.id.title_father_car);
        final CheckBox checkBox = (CheckBox) view.findViewById(R.id.cb_father_car);
        textView.setText(fatherbean.getName());
        checkBox.setChecked(fatherbean.isflag());
        //复选框点击事件
        checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                boolean checked = checkBox.isChecked();
                fatherbean.setIsflag(checked);
                for (int j=0;j//计算总价方法
                f.mouth(f);
                boolean setcheck = f.setcheck();
                f.cb.setChecked(setcheck);
                notifyDataSetChanged();
            }
        });

        return view;
    }

    @Override
    public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) {
        final childBean bean = lists.get(i).get(i1);
        //加载布局
        view= View.inflate(context, R.layout.view_child,null);
        //获取构件
        SimpleDraweeView img = (SimpleDraweeView) view.findViewById(R.id.child_img);
        TextView title = (TextView) view.findViewById(R.id.child_tit);
        AddView addView = (AddView) view.findViewById(R.id.addview);
        final TextView price = (TextView) view.findViewById(R.id.child_price);
        final CheckBox checkBox = (CheckBox) view.findViewById(R.id.cb_child);
        //修改内容
        addView.setNumber(bean.getNum());
        price.setText(bean.getPrice()+"");
        title.setText(bean.getName());
        checkBox.setChecked(lists.get(i).get(i1).isflag());
        img.setImageURI(bean.getImgurl());
        //加减器点击事件
        addView.setOnAddDeleteClick(new AddView.OnAddDeleteClickListener() {
            @Override
            public void onAddClick(View v) {
                int num = bean.getNum();
                num++;
                bean.setNum(num);
                //计算总价方法
                f.mouth(f);
                notifyDataSetChanged();
            }
            @Override
            public void onDelClick(View v) {
                int num = bean.getNum();
                if (num==1){
                    Toast.makeText(context,"数量不能小于1",Toast.LENGTH_SHORT).show();
                }
                if(num>1){
                    num--;
                }
                bean.setNum(num);
                //计算总价方法
                f.mouth(f);
                notifyDataSetChanged();
            }
        });

        checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                boolean checked = checkBox.isChecked();
                lists.get(i).get(i1).setIsflag(checked);
                boolean b=true;
                if (checked){
                    for (int j=0;jboolean flag = lists.get(i).get(j).isflag();
                        if (flag==false){
                            b=false;
                        }
                    }
                    //修改父级的选中状态
                    if (b){
                        list.get(i).setIsflag(true);
                    }
                }else{
                    list.get(i).setIsflag(false);
                }
                //计算总价方法
                f.mouth(f);
                boolean setcheck = f.setcheck();
                f.cb.setChecked(setcheck);
                notifyDataSetChanged();
            }
        });
        return view;
    }

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

//CarBean

package com.example.a123.zhoukao2.bean;

import java.util.List;

/** * Created by 123 on 2018/1/6. */

public class CarBean {

    /** * msg : 请求成功 * code : 0 * data : [{"list":[{"bargainPrice":111.99,"createtime":"2017-10-14T21:39:05","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","num":1,"pid":1,"price":118,"pscid":1,"selected":0,"sellerid":17,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}],"sellerName":"商家17","sellerid":"17"},{"list":[{"bargainPrice":111.99,"createtime":"2017-10-14T21:39:05","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","num":4,"pid":2,"price":299,"pscid":1,"selected":0,"sellerid":18,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}],"sellerName":"商家18","sellerid":"18"}] */

    private String msg;
    private String code;
    private List 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 getData() {
        return data;
    }

    public void setData(List data) {
        this.data = data;
    }

    public static class DataBean {
        /** * list : [{"bargainPrice":111.99,"createtime":"2017-10-14T21:39:05","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","num":1,"pid":1,"price":118,"pscid":1,"selected":0,"sellerid":17,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}] * sellerName : 商家17 * sellerid : 17 */

        private String sellerName;
        private String sellerid;
        private List list;

        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 getList() {
            return list;
        }

        public void setList(List list) {
            this.list = list;
        }

        public static class ListBean {
            /** * bargainPrice : 111.99 * createtime : 2017-10-14T21:39:05 * detailUrl : https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends * images : https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg * num : 1 * pid : 1 * price : 118.0 * pscid : 1 * selected : 0 * sellerid : 17 * subhead : 每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下 * title : 北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g */

            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;

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

//childBean

package com.example.a123.zhoukao2.bean;

/** * Created by 123 on 2018/1/6. */

public class childBean {
    private String name;
    private String imgurl;
    private String pid ;
    private boolean isflag;
    private double price;
    private int num;

    public childBean(String name, String imgurl, String pid, double price, boolean isflag,int num) {
        this.name = name;
        this.imgurl = imgurl;
        this.pid = pid;
        this.isflag = isflag;
        this.price = price;
        this.num=num;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public double getPrice() {
        return price;
    }

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

    public boolean isflag() {
        return isflag;
    }

    public void setIsflag(boolean isflag) {
        this.isflag = isflag;
    }

    public childBean(String name, String imgurl, String pid) {
        this.name = name;
        this.imgurl = imgurl;
        this.pid = pid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getImgurl() {
        return imgurl;
    }

    public void setImgurl(String imgurl) {
        this.imgurl = imgurl;
    }

    public String getPid() {
        return pid;
    }

    public void setPid(String pid) {
        this.pid = pid;
    }
}

//delBean

package com.example.a123.zhoukao2.bean;

/** * Created by 123 on 2018/1/6. */

public class delBean {
    /** * msg : 加购成功 * code : 0 */

    private String msg;
    private String code;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}

//fatherBean

package com.example.a123.zhoukao2.bean;

/** * Created by 123 on 2018/1/6. */

public class fatherBean {
    private String name;
    private boolean isflag;

    public fatherBean(String name, boolean isflag) {
        this.name = name;
        this.isflag = isflag;
    }

    public boolean isflag() {
        return isflag;
    }

    public void setIsflag(boolean isflag) {
        this.isflag = isflag;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


}

//ApiService

package com.example.a123.zhoukao2.model;

import com.example.a123.zhoukao2.bean.CarBean;
import com.example.a123.zhoukao2.bean.delBean;

import java.util.Map;

import io.reactivex.Flowable;
import retrofit2.http.GET;
import retrofit2.http.QueryMap;

/** * Created by 123 on 2018/1/6. */

public interface ApiService {
    //http://120.27.23.105/product/getCarts 购物车
    @GET("product/getCarts")
    Flowable getcars(@QueryMap Map map);

    //http://120.27.23.105/product/deleteCart 删除
    @GET("product/deleteCart")
    Flowable delete(@QueryMap Map map);
}

//IModel

package com.example.a123.zhoukao2.model;

import java.util.Map;

/** * Created by 123 on 2018/1/6. */

public interface IModel {
    void get(String baseurl, Map map, String tag);
}

//Model

package com.example.a123.zhoukao2.model;

import com.example.a123.zhoukao2.bean.CarBean;
import com.example.a123.zhoukao2.bean.delBean;
import com.example.a123.zhoukao2.presenter.MyPresenter;

import java.util.Map;

import io.reactivex.Flowable;

/** * Created by 123 on 2018/1/6. */

public class Model implements IModel {
    private MyPresenter presenter;

    public Model(MyPresenter presenter) {
        this.presenter = presenter;
    }

    @Override
    public void get(String baseurl, Map map, String tag) {
        ApiService service = RetrofitUtils.getInstance(baseurl).getretrofit().create(ApiService.class);

        if (tag.equals("getcars")){//购物车
            Flowable flowable = service.getcars(map);
            presenter.getData(flowable,tag);
        }else if (tag.equals("del")){//删除
            Flowable flowable = service.delete(map);
            presenter.getData(flowable,tag);
        }
    }
}

//RetrofitUtils

package com.example.a123.zhoukao2.model;

import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/** * Created by 123 on 2018/1/6. */

public class RetrofitUtils {
    private static volatile RetrofitUtils instance;
    private final Retrofit retrofit;

    private RetrofitUtils(String baseurl) {
        retrofit = new Retrofit.Builder()
                .baseUrl(baseurl)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }

    public static RetrofitUtils getInstance(String baseurl) {
        if (instance == null) {
            synchronized (RetrofitUtils.class) {
                if (instance == null) {
                    instance = new RetrofitUtils(baseurl);
                }
            }
        }
        return instance;
    }

    public Retrofit getretrofit(){
        return retrofit;
    }
}

//IPresenter

package com.example.a123.zhoukao2.presenter;

import java.util.Map;

/** * Created by 123 on 2018/1/6. */

public interface IPresenter {
    void get(String baseurl, Map map, String tag);
}

//MyPresenter

package com.example.a123.zhoukao2.presenter;

import com.example.a123.zhoukao2.model.Model;
import com.example.a123.zhoukao2.view.IView;

import java.util.Map;

import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import io.reactivex.subscribers.DisposableSubscriber;

/** * Created by 123 on 2018/1/6. */

public class MyPresenter implements IPresenter{
    private IView iv;
    private DisposableSubscriber subscriber;

    public MyPresenter(IView iv) {
        this.iv = iv;
    }

    @Override
    public void get(String baseurl, Map map, String tag) {
        Model model = new Model(this);
        model.get(baseurl,map,tag);
    }

    public void getData(Flowable flowable, final String tag){
        subscriber = (DisposableSubscriber) flowable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableSubscriber() {
                    @Override
                    public void onNext(Object o) {
                        iv.onSuccess(o,tag);
                    }

                    @Override
                    public void onError(Throwable t) {
                        iv.onFailed((Exception) t);
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    //防止内存泄漏
    public void detatch(){
        if (iv != null) {
            iv = null;
        }
        if(subscriber !=null){
            if(!subscriber.isDisposed()){
                subscriber.dispose();
            }
        }
    }
}

//App

package com.example.a123.zhoukao2;

import android.app.Application;

import com.facebook.drawee.backends.pipeline.Fresco;

/** * Created by 123 on 2018/1/6. */

public class App extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

//MainActivity

package com.example.a123.zhoukao2;

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

import com.example.a123.zhoukao2.adaper.CarAdapter;
import com.example.a123.zhoukao2.bean.CarBean;
import com.example.a123.zhoukao2.bean.childBean;
import com.example.a123.zhoukao2.bean.delBean;
import com.example.a123.zhoukao2.bean.fatherBean;
import com.example.a123.zhoukao2.presenter.MyPresenter;
import com.example.a123.zhoukao2.view.IView;

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

public class MainActivity extends AppCompatActivity implements IView {
    private ExpandableListView ev;
    public CheckBox cb;
    public TextView sum;
    private Button delete;
    private MyPresenter presenter;
    private List list;
    private List> lists;
    private CarAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ev = (ExpandableListView) findViewById(R.id.ev);
        cb = (CheckBox)  findViewById(R.id.cb_all);
        sum = (TextView)  findViewById(R.id.text_sum);
        delete = (Button) findViewById(R.id.btn_del);

        list=new ArrayList<>();
        lists=new ArrayList<>();

        //新建适配器
        adapter = new CarAdapter(this, list, lists,this);
        ev.setAdapter(adapter);
        //全选按钮点击事件
        cb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                for(int i=0;ifor(int i=0;ifor(int j=0;jint n=0;
                for (int j=0;j beanList = lists.get(j);
                    for (int k=0;kif(beanList.get(k).isflag()){
                            int num = beanList.get(k).getNum();
                            double price1 = beanList.get(k).getPrice();
                            n+=price1*num;
                        }
                    }
                }
                sum.setText("总价为:"+n);
                //刷新适配器
                adapter.notifyDataSetChanged();
            }
        });
        //删除按钮点击事件
        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                for(int i=0;i beanList = lists.get(i);
                    for (int j=0;jif (bean.isflag()){
                            String pid = bean.getPid();
                            lists.get(i).remove(j);
                            Map map1=new HashMap();
                            map1.put("uid","4479");
                            map1.put("pid",pid);
                            presenter.get("http://120.27.23.105/",map1,"del");
                            mouth(MainActivity.this);
                        }
                    }
                    if (lists.get(i).size()==0){
                        lists.remove(i);
                        list.remove(i);
                        i--;
                    }
                }
                adapter.notifyDataSetChanged();
            }
        });

        presenter = new MyPresenter(this);
        Map map=new HashMap<>();
        map.put("source","android");
        map.put("uid","10985");
        presenter.get("http://120.27.23.105/",map,"getcars");
    }
    //判断是否全选
    public boolean setcheck(){
        boolean b=true;
        for (int i=0;iif (!list.get(i).isflag()){
                b=list.get(i).isflag();
                break;
            }
            List beanList = lists.get(i);
            for(int j=0;jif (!beanList.get(j).isflag()){
                    b=beanList.get(j).isflag();
                    break;
                }
            }
        }
        return b;
    }

    //计算总价的方法
    public void mouth(MainActivity f){
        float n=0;
        for (int j=0;j beanList = lists.get(j);
            for (int k=0;kif(beanList.get(k).isflag()){
                    int num = beanList.get(k).getNum();
                    double price1 = beanList.get(k).getPrice();
                    n+=price1*num;
                }
            }
        }
        f.sum.setText(""+n);
    }
    @Override
    public void onSuccess(Object o, String tag) {
        if (tag.equals("getcars")){
            if (o!=null){
                CarBean a = (CarBean)o;
                List beanList = a.getData();
                //建立数据源
                for(int i=0;inew fatherBean(name,true));
                    List listBeen = beanList.get(i).getList();
                    List l=new ArrayList<>();
                    for(int j=0;jdouble price = listBeen.get(j).getPrice();
                        String s = listBeen.get(j).getImages();
                        String[] strings = s.split("!");
                        String title = listBeen.get(j).getTitle();
                        int id = listBeen.get(j).getPid();
                        int num = listBeen.get(j).getNum();
                        l.add(new childBean(title,strings[0],id+"",price,true,num));
                    }
                    lists.add(l);
                }
                //默认展开
                for(int s = 0; s < adapter.getGroupCount(); s++){
                    ev.expandGroup(s);
                }
                mouth(this);
                //刷新适配器
                adapter.notifyDataSetChanged();
            }
        }else if(tag.equals("del")){
            delBean bean = (delBean) o;
        }
    }

    @Override
    public void onFailed(Exception e) {

    }
}

//AddView

package com.example.a123.zhoukao2.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.example.a123.zhoukao2.R;

/** * Created by 123 on 2018/1/6. */

public class AddView extends RelativeLayout {

    private TextView count;

    public AddView(Context context) {
        this(context,null);
    }

    public AddView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public AddView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context, attrs, defStyleAttr);
    }

    private OnAddDeleteClickListener listener;

    //对外提供一个点击的回调接口
    public interface OnAddDeleteClickListener{
        void onAddClick(View v);
        void onDelClick(View v);
    }

    public void setOnAddDeleteClick(OnAddDeleteClickListener listener){
        this.listener = listener;
    }

    private void initView(final Context context, AttributeSet attrs, int defStyleAttr) {
        View view = View.inflate(context, R.layout.view_add, this);
        ImageView delete = (ImageView)view.findViewById(R.id.delete);
        count = (TextView)view.findViewById(R.id.count);
        ImageView add = (ImageView)view.findViewById(R.id.add);
        delete.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onDelClick(view);
            }
        });
        add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onAddClick(view);
            }
        });
    }

    //对外提供设置EditText值的方法
    public void setNumber(int number){
        count.setText(number + "");
    }
    //得到控件原来的值,并转成int类型
    public int getNumber(){
        int number = Integer.parseInt(count.getText().toString().trim());
        return number;
    }
}

//IView

package com.example.a123.zhoukao2.view;

/** * Created by 123 on 2018/1/6. */

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

RXjava+Retrofit二级购物车_第1张图片

你可能感兴趣的:(RXjava+Retrofit二级购物车)