登陆/注册/列表/详情/购物车

ApiService

public interface ApiService {
   /* 登陆
    http://120.27.23.105/user/login?mobile=17610781536&password=666666*/
    @GET("user/login")
    Flowable<LoginBean> getLogin(@QueryMap Map<String,String> map);

   /* 注册
    http://120.27.23.105/user/reg?mobile=17610781536&password=666666*/
   @GET("user/reg")
   Flowable<RegBean> getReg(@QueryMap Map<String,String> map);

   /*列表信息
   https://www.zhaoapi.cn/product/getProducts?pscid=39&page=1
   * */
   @GET("product/getProducts")
   Flowable<ProductsBean> getProducts(@QueryMap Map<String,String> map);

   /*商品详情
   *https://www.zhaoapi.cn/product/getProductDetail?source=android&pid=10
   * */
   @GET("product/getProductDetail")
   Flowable<DetailBean> getDetail(@QueryMap Map<String,String> map);

   /*添加购物车
   *http://120.27.23.105/product/addCart?source=android&uid=3809&pid=30
   * */
   @GET("product/addCart")
   Flowable<AddBean> getAdd(@QueryMap Map<String,String> map);

   /*查询购物车信息
   * http://120.27.23.105/product/getCarts?source=android&uid=3809
   * */
   @GET("product/getCarts")
   Flowable<CartsBean> getCarts(@QueryMap Map<String,String> map);

   /*删除购物车
   * http://120.27.23.105/product/deleteCart?source=android&uid=1653&pid=2
   * */
   @GET("product/deleteCart")
   Flowable<DeleteBean> getDelete(@QueryMap Map<String,String> map);


}
Retrofit+RxJava封装

public class RetrofitUtils {
    private static volatile RetrofitUtils instance;
    private ApiService apiService;

    public RetrofitUtils(String baseUrl){
        OkHttpClient build = new OkHttpClient.Builder().build();
        Retrofit retrofit=new Retrofit.Builder()
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(baseUrl)
                .client(build)
                .build();
        apiService = retrofit.create(ApiService.class);
    }
    public static RetrofitUtils getInstance(String baseUrl){
        if(instance==null){
            synchronized (RetrofitUtils.class){
                if(null==instance){
                    instance=new RetrofitUtils(baseUrl);
                }
            }
        }
        return instance;
    }
    public ApiService getApiService(){
        return apiService;
    }
}

登陆的实现

public class LoginBean {

    /**
     * msg : 登录成功
     * code : 0
     * data : {"age":null,"appkey":"cb25e92abe4d594a","appsecret":"DA6A190938077ABD243BC4D0E64BC295","createtime":"2018-01-11T17:56:53","email":null,"fans":null,"follow":null,"gender":null,"icon":null,"latitude":null,"longitude":null,"mobile":"17610781536","money":null,"nickname":null,"password":"473344696F4685CAE5B5B3C354BC77BE","praiseNum":null,"token":"577C6DC452905B6EE8EB234D5276C3DD","uid":3809,"userId":null,"username":"17610781536"}
     */

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

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

    public static class DataBean {
        /**
         * age : null
         * appkey : cb25e92abe4d594a
         * appsecret : DA6A190938077ABD243BC4D0E64BC295
         * createtime : 2018-01-11T17:56:53
         * email : null
         * fans : null
         * follow : null
         * gender : null
         * icon : null
         * latitude : null
         * longitude : null
         * mobile : 17610781536
         * money : null
         * nickname : null
         * password : 473344696F4685CAE5B5B3C354BC77BE
         * praiseNum : null
         * token : 577C6DC452905B6EE8EB234D5276C3DD
         * uid : 3809
         * userId : null
         * username : 17610781536
         */

        private Object age;
        private String appkey;
        private String appsecret;
        private String createtime;
        private Object email;
        private Object fans;
        private Object follow;
        private Object gender;
        private Object icon;
        private Object latitude;
        private Object longitude;
        private String mobile;
        private Object money;
        private Object nickname;
        private String password;
        private Object praiseNum;
        private String token;
        private int uid;
        private Object userId;
        private String username;

        public Object getAge() {
            return age;
        }

        public void setAge(Object age) {
            this.age = age;
        }

        public String getAppkey() {
            return appkey;
        }

        public void setAppkey(String appkey) {
            this.appkey = appkey;
        }

        public String getAppsecret() {
            return appsecret;
        }

        public void setAppsecret(String appsecret) {
            this.appsecret = appsecret;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public Object getEmail() {
            return email;
        }

        public void setEmail(Object email) {
            this.email = email;
        }

        public Object getFans() {
            return fans;
        }

        public void setFans(Object fans) {
            this.fans = fans;
        }

        public Object getFollow() {
            return follow;
        }

        public void setFollow(Object follow) {
            this.follow = follow;
        }

        public Object getGender() {
            return gender;
        }

        public void setGender(Object gender) {
            this.gender = gender;
        }

        public Object getIcon() {
            return icon;
        }

        public void setIcon(Object icon) {
            this.icon = icon;
        }

        public Object getLatitude() {
            return latitude;
        }

        public void setLatitude(Object latitude) {
            this.latitude = latitude;
        }

        public Object getLongitude() {
            return longitude;
        }

        public void setLongitude(Object longitude) {
            this.longitude = longitude;
        }

        public String getMobile() {
            return mobile;
        }

        public void setMobile(String mobile) {
            this.mobile = mobile;
        }

        public Object getMoney() {
            return money;
        }

        public void setMoney(Object money) {
            this.money = money;
        }

        public Object getNickname() {
            return nickname;
        }

        public void setNickname(Object nickname) {
            this.nickname = nickname;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public Object getPraiseNum() {
            return praiseNum;
        }

        public void setPraiseNum(Object praiseNum) {
            this.praiseNum = praiseNum;
        }

        public String getToken() {
            return token;
        }

        public void setToken(String token) {
            this.token = token;
        }

        public int getUid() {
            return uid;
        }

        public void setUid(int uid) {
            this.uid = uid;
        }

        public Object getUserId() {
            return userId;
        }

        public void setUserId(Object userId) {
            this.userId = userId;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }
    }
}
public class ModelLogin implements IModel{
    private PresenterLogin presenterLogin;

    public ModelLogin(PresenterLogin presenterLogin) {
        this.presenterLogin = presenterLogin;
    }

    @Override
    public void getData(String basrUrl, Map<String, String> map) {
        Flowable<LoginBean> flowable = RetrofitUtils.getInstance(basrUrl).getApiService().getLogin(map);
        presenterLogin.getNews(flowable);
    }
}

public class PresenterLogin implements IPresenter{
    private IView iView;

    private DisposableSubscriber<LoginBean> subscriber;

    public PresenterLogin(IView iView) {
        this.iView = iView;

    }
    public void delethView(){
        if(iView!=null){
            iView=null;
        }
        if(subscriber!=null){
            subscriber=null;
        }
    }

    @Override
    public void getData(String baseUrl, Map<String, String> map) {
        IModel model=new ModelLogin(this);
        model.getData(baseUrl,map);
    }
    public void getNews(Flowable<LoginBean> flowable){
            subscriber=flowable.subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeWith(new DisposableSubscriber<LoginBean>() {
                        @Override
                        public void onNext(LoginBean loginBean) {
                            Log.i("P层登陆",loginBean.toString());
                            iView.Success(loginBean);
                        }

                        @Override
                        public void onError(Throwable t) {
                            iView.Failed(t);
                        }

                        @Override
                        public void onComplete() {

                        }
                    });
    }

}
布局

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="com.example.summary.MainActivity">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:text="Welcome"
        android:textSize="36sp"
        android:gravity="center"
        android:background="#07e2f5"/>

    <EditText
        android:id="@+id/login_user"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入用户名"/>
    <EditText
        android:id="@+id/login_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入密码"/>
    <TextView
        android:id="@+id/login_reg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="新用户注册"
        android:textColor="#0a94f7"/>
    <Button
        android:id="@+id/login_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#7cf50a"
        android:text="登陆"/>


</LinearLayout>


public class MainActivity extends AppCompatActivity implements IView {

    @BindView(R.id.login_user)
    EditText loginUser;
    @BindView(R.id.login_password)
    EditText loginPassword;
    @BindView(R.id.login_reg)
    TextView loginReg;
    @BindView(R.id.login_btn)
    Button loginBtn;
    private PresenterLogin presenterLogin;

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

    }

    @Override
    public void Success(Object o) {
        LoginBean loginBean= (LoginBean) o;
        if(loginBean.getMsg()!=null){
            Toast.makeText(this,loginBean.getMsg(),Toast.LENGTH_SHORT).show();
        }
        if(loginBean.getCode().equals("0")){
            //跳转列表
            Toast.makeText(this,loginBean.getMsg(),Toast.LENGTH_SHORT).show();
            Intent intent=new Intent(MainActivity.this, ProductsActivity.class);
            startActivity(intent);
        }

    }

    @Override
    public void Failed(Throwable t) {

    }

    @OnClick({R.id.login_reg, R.id.login_btn})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.login_reg:
                Intent intent=new Intent(MainActivity.this, RegActivity.class);
                startActivity(intent);
                break;
            case R.id.login_btn:
                presenterLogin = new PresenterLogin(this);
                Map<String,String> map=new HashMap<>();
                map.put("mobile",loginUser.getText().toString().trim());
                map.put("password",loginPassword.getText().toString().trim());
                presenterLogin.getData("http://120.27.23.105/",map);
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenterLogin.delethView();

    }
}

注册的实现

public class RegBean {

    /**
     * msg : 天呢!用户已注册
     * code : 1
     * data : {}
     */

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

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

public class ModelReg implements IModel{
    private PresenterReg presenterReg;

    public ModelReg(PresenterReg presenterReg) {
        this.presenterReg = presenterReg;
    }

    @Override
    public void getData(String basrUrl, Map<String, String> map) {
        Flowable<RegBean> flowable = RetrofitUtils.getInstance(basrUrl).getApiService().getReg(map);
        presenterReg.getNews(flowable);
    }
}

public class PresenterReg implements IPresenter{
    private IView iView;
    private DisposableSubscriber<RegBean> subscriber;

    public PresenterReg(IView iView) {
        this.iView = iView;

    }
    public void delethView(){
        if(iView!=null){
            iView=null;
        }
        if(subscriber!=null){
            if(!subscriber.isDisposed()){
                subscriber.dispose();
            }
        }
    }

    @Override
    public void getData(String baseUrl, Map<String, String> map) {
        IModel model=new ModelReg(this);
        model.getData(baseUrl,map);
    }
    public void getNews(Flowable<RegBean> flowable){
        subscriber=flowable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableSubscriber<RegBean>() {
                    @Override
                    public void onNext(RegBean regBean) {
                        iView.Success(regBean);
                    }

                    @Override
                    public void onError(Throwable t) {
                        iView.Failed(t);
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

}
布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.summary.view.RegActivity">
    <EditText
        android:id="@+id/reg_user"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入用户名"/>
    <EditText
        android:id="@+id/reg_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入密码"/>
    <Button
        android:id="@+id/reg_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="注册"
        android:background="#05f9c4"/>
</LinearLayout>

public class RegActivity extends AppCompatActivity implements IView{

    @BindView(R.id.reg_user)
    EditText regUser;
    @BindView(R.id.reg_password)
    EditText regPassword;
    @BindView(R.id.reg_btn)
    Button regBtn;
    private PresenterReg presenterReg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reg);
        ButterKnife.bind(this);
    }

    @OnClick(R.id.reg_btn)
    public void onViewClicked() {
        presenterReg = new PresenterReg(this);
        Map<String,String> map=new HashMap<>();
        map.put("mobile",regUser.getText().toString().trim());
        map.put("password",regPassword.getText().toString().trim());
        presenterReg.getData("http://120.27.23.105/",map);
    }

    @Override
    public void Success(Object o) {
        RegBean regBean= (RegBean) o;
        if(regBean.getCode().equals("0")){
            Toast.makeText(this,regBean.getMsg(),Toast.LENGTH_SHORT).show();
            finish();
        }else if(regBean.getCode().equals("1")){
            Toast.makeText(this,regBean.getMsg(),Toast.LENGTH_SHORT).show();
        }

    }

    @Override
    public void Failed(Throwable t) {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenterReg.delethView();
    }
}
列表的实现

public class ProductsBean {

    /**
     * msg : 请求成功
     * code : 0
     * data : [{"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","itemtype":1,"pid":45,"price":2999,"pscid":39,"salenum":4666,"sellerid":1,"subhead":"高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽!","title":"一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机"},{"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","itemtype":0,"pid":46,"price":234,"pscid":39,"salenum":868,"sellerid":2,"subhead":"【iPhone新品上市】新一代iPhone,让智能看起来更不一样","title":"Apple iPhone 8 Plus (A1864) 64GB 金色 移动联通电信4G手机"},{"bargainPrice":1599,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/1993026402.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t5863/302/8961270302/97126/41feade1/5981c81cNc1b1fbef.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7003/250/1488538438/195825/53bf31ba/5981c57eN51e95176.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5665/100/8954482513/43454/418611a9/5981c57eNd5fc97ba.jpg!q70.jpg","itemtype":2,"pid":47,"price":111,"pscid":39,"salenum":757,"sellerid":3,"subhead":"碳黑色 32GB 全网通 官方标配   1件","title":"锤子 坚果Pro 特别版 巧克力色 酒红色 全网通 移动联通电信4G手机 双卡双待 碳黑色 32GB 全网通"},{"bargainPrice":3455,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/12224420750.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8803/356/1478945529/489755/2a163ace/59ba5e84N7bb9a666.jpg!q70.jpg","itemtype":1,"pid":48,"price":222,"pscid":39,"salenum":656,"sellerid":4,"subhead":"【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机","title":"小米(MI) 小米MIX2 手机 黑色 全网通 (6GB+64GB)【标配版】"},{"bargainPrice":1999,"createtime":"2017-10-10T16:09:02","detailUrl":"https://item.m.jd.com/product/5025971.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t7210/232/3738666823/232298/9004583e/59c3a9a7N8de42e15.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8356/82/2107423621/109733/c019b8c6/59c3a9a6Ne9a4bdd7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t10219/74/25356012/171379/7d55e296/59c3a9a8N82fa6e02.jpg!q70.jpg","itemtype":0,"pid":49,"price":333,"pscid":39,"salenum":123,"sellerid":5,"subhead":"vivo X20 带你开启全面屏时代!逆光也清晰,照亮你的美!","title":"vivo X20 全面屏手机 全网通 4GB+64GB 金色 移动联通电信4G手机 双卡双待"},{"bargainPrice":3455,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/12224420750.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8803/356/1478945529/489755/2a163ace/59ba5e84N7bb9a666.jpg!q70.jpg","itemtype":2,"pid":50,"price":444,"pscid":39,"salenum":54,"sellerid":6,"subhead":"【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机","title":"小米(MI) 小米MIX2 手机 黑色 全网通 (6GB+64GB)【标配版】"},{"bargainPrice":3455,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/12224420750.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8803/356/1478945529/489755/2a163ace/59ba5e84N7bb9a666.jpg!q70.jpg","itemtype":1,"pid":51,"price":555,"pscid":39,"salenum":424,"sellerid":7,"subhead":"【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机","title":"小米(MI) 小米MIX2 手机 黑色 全网通 (6GB+64GB)【标配版】"},{"bargainPrice":3455,"createtime":"2017-10-03T23:53:28","detailUrl":"https://item.m.jd.com/product/12224420750.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8803/356/1478945529/489755/2a163ace/59ba5e84N7bb9a666.jpg!q70.jpg","itemtype":0,"pid":52,"price":666,"pscid":39,"salenum":212,"sellerid":8,"subhead":"【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机","title":"小米(MI) 小米MIX2 手机 黑色 全网通 (6GB+64GB)【标配版】"},{"bargainPrice":2999,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/2385655.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t2068/298/2448145915/157953/7be197df/56d51a42Nd86f1c8e.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2437/128/1687178395/117431/bcc190c1/56d3fcbaNb2963d21.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t2467/222/2263160610/95597/927b8a2f/56d3eafeNdecebeb6.jpg!q70.jpg","itemtype":2,"pid":53,"price":777,"pscid":39,"salenum":0,"sellerid":9,"subhead":"Super AMOLED三星双曲面2K 屏,支持无线充电!","title":"三星 Galaxy S7 edge(G9350)4GB+32GB 铂光金 移动联通电信4G手机 双卡双待"},{"bargainPrice":3455,"createtime":"2017-10-03T23:53:28","detailUrl":"https://item.m.jd.com/product/12224420750.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8803/356/1478945529/489755/2a163ace/59ba5e84N7bb9a666.jpg!q70.jpg","itemtype":0,"pid":54,"price":888,"pscid":39,"salenum":7575,"sellerid":10,"subhead":"【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机","title":"小米(MI) 小米MIX2 手机 黑色 全网通 (6GB+64GB)【标配版】"}]
     * page : 1
     */

    private String msg;
    private String code;
    private String page;
    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 String getPage() {
        return page;
    }

    public void setPage(String page) {
        this.page = page;
    }

    public List<DataBean> getData() {
        return data;
    }

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

    public static class DataBean {
        /**
         * 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
         * itemtype : 1
         * pid : 45
         * price : 2999
         * pscid : 39
         * salenum : 4666
         * sellerid : 1
         * subhead : 高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽!
         * title : 一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机
         */

        private int bargainPrice;
        private String createtime;
        private String detailUrl;
        private String images;
        private int itemtype;
        private int pid;
        private int price;
        private int pscid;
        private int salenum;
        private int sellerid;
        private String subhead;
        private String title;

        public int getBargainPrice() {
            return bargainPrice;
        }

        public void setBargainPrice(int bargainPrice) {
            this.bargainPrice = bargainPrice;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public String getDetailUrl() {
            return detailUrl;
        }

        public void setDetailUrl(String detailUrl) {
            this.detailUrl = detailUrl;
        }

        public String getImages() {
            return images;
        }

        public void setImages(String images) {
            this.images = images;
        }

        public int getItemtype() {
            return itemtype;
        }

        public void setItemtype(int itemtype) {
            this.itemtype = itemtype;
        }

        public int getPid() {
            return pid;
        }

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

        public int getPrice() {
            return price;
        }

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

        public int getPscid() {
            return pscid;
        }

        public void setPscid(int pscid) {
            this.pscid = pscid;
        }

        public int getSalenum() {
            return salenum;
        }

        public void setSalenum(int salenum) {
            this.salenum = salenum;
        }

        public int getSellerid() {
            return sellerid;
        }

        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }

        public String getSubhead() {
            return subhead;
        }

        public void setSubhead(String subhead) {
            this.subhead = subhead;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }
    }
}

public class ModelProducts implements IModel{
    private PresenterProducts presenterProducts;

    public ModelProducts(PresenterProducts presenterProducts) {
        this.presenterProducts = presenterProducts;
    }

    @Override
    public void getData(String basrUrl, Map<String, String> map) {
        Flowable<ProductsBean> flowable = RetrofitUtils.getInstance(basrUrl).getApiService().getProducts(map);
        presenterProducts.getNews(flowable);
    }

public class PresenterProducts implements IPresenter{
    private IView iView;
    private DisposableSubscriber<ProductsBean> subscriber;

    public PresenterProducts(IView iView) {
        this.iView = iView;
    }
    public void deletchView(){
        if(iView!=null){
            iView=null;
        }
        if(subscriber!=null){
            if(!subscriber.isDisposed()){
                subscriber.dispose();
            }
        }
    }

    @Override
    public void getData(String baseUrl, Map<String, String> map) {
        IModel model=new ModelProducts(this);
        model.getData(baseUrl, map);
    }
    public void getNews(Flowable<ProductsBean> flowable){
                subscriber=flowable.subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribeWith(new DisposableSubscriber<ProductsBean>() {
                            @Override
                            public void onNext(ProductsBean productsBean) {
                                iView.Success(productsBean);
                            }

                            @Override
                            public void onError(Throwable t) {
                                iView.Failed(t);
                            }

                            @Override
                            public void onComplete() {

                            }
                        });
    }
}
布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.summary.view.ProductsActivity">
<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
</LinearLayout>
item

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<ImageView
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:src="@mipmap/ic_launcher"
    android:id="@+id/imageView" />
    <TextView
        android:id="@+id/item_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1111111111"
        android:layout_alignParentTop="true"
        android:layout_toEndOf="@+id/imageView"
        android:layout_marginStart="18dp" />
    <TextView
        android:id="@+id/item_title2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="2222222222"
        android:layout_alignBottom="@+id/imageView"
        android:layout_alignStart="@+id/item_title" />
</RelativeLayout>

public class ProductsActivity extends AppCompatActivity implements IView{

    @BindView(R.id.recyclerView)
    RecyclerView recyclerView;
    private PresenterProducts presenterProducts;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_products);
        ButterKnife.bind(this);
        Map<String,String> map=new HashMap<>();
        map.put("pscid","39");
        map.put("page","1");
        presenterProducts = new PresenterProducts(this);
        presenterProducts.getData("https://www.zhaoapi.cn/",map);

    }



    @Override
    public void Success(Object o) {
        ProductsBean productsBean= (ProductsBean) o;
        List<ProductsBean.DataBean> data = productsBean.getData();
        LinearLayoutManager manager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
        ProductsAdapter adapter=new ProductsAdapter(this,data);
        recyclerView.setLayoutManager(manager);
        recyclerView.setAdapter(adapter);
    }

    @Override
    public void Failed(Throwable t) {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenterProducts.deletchView();
    }
}

public class ProductsAdapter extends RecyclerView.Adapter<ProductsAdapter.ViewHolder>{
    private Context context;
    private List<ProductsBean.DataBean> list;

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

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view=View.inflate(context,R.layout.item_products,null);
        ViewHolder holder=new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
        String images = list.get(position).getImages();
        String[] split = images.split("!");
        Glide.with(context).load(split[0]).into(holder.img);
        holder.tv1.setText(list.get(position).getSubhead());
        holder.tv2.setText(list.get(position).getTitle());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(context, DetailActivity.class);
                intent.putExtra("pid",list.get(position).getPid()+"");
                context.startActivity(intent);
            }
        });
    }

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

    class ViewHolder extends RecyclerView.ViewHolder{
        private ImageView img;
        private TextView tv1;
        private TextView tv2;
         public ViewHolder(View itemView) {
             super(itemView);
             img= (ImageView) itemView.findViewById(R.id.imageView);
             tv1= (TextView) itemView.findViewById(R.id.item_title);
             tv2= (TextView) itemView.findViewById(R.id.item_title2);
         }
     }
}

详情+加入购物车

public class DetailBean {

    /**
     * msg :
     * seller : {"description":"我是商家8","icon":"http://120.27.23.105/images/icon.png","name":"商家8","productNums":999,"score":5,"sellerid":8}
     * code : 0
     * data : {"bargainPrice":111.99,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","itemtype":2,"pid":15,"price":233.99,"pscid":1,"salenum":666,"sellerid":8,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}
     */

    private String msg;
    private SellerBean seller;
    private String code;
    private DataBean data;

    public String getMsg() {
        return msg;
    }

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

    public SellerBean getSeller() {
        return seller;
    }

    public void setSeller(SellerBean seller) {
        this.seller = seller;
    }

    public String getCode() {
        return code;
    }

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

    public DataBean getData() {
        return data;
    }

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

    public static class SellerBean {
        /**
         * description : 我是商家8
         * icon : http://120.27.23.105/images/icon.png
         * name : 商家8
         * productNums : 999
         * score : 5
         * sellerid : 8
         */

        private String description;
        private String icon;
        private String name;
        private int productNums;
        private int score;
        private int sellerid;

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getIcon() {
            return icon;
        }

        public void setIcon(String icon) {
            this.icon = icon;
        }

        public String getName() {
            return name;
        }

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

        public int getProductNums() {
            return productNums;
        }

        public void setProductNums(int productNums) {
            this.productNums = productNums;
        }

        public int getScore() {
            return score;
        }

        public void setScore(int score) {
            this.score = score;
        }

        public int getSellerid() {
            return sellerid;
        }

        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }
    }

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

        private double bargainPrice;
        private String createtime;
        private String detailUrl;
        private String images;
        private int itemtype;
        private int pid;
        private String price;
        private int pscid;
        private int salenum;
        private int sellerid;
        private String subhead;
        private String title;

        public double getBargainPrice() {
            return bargainPrice;
        }

        public void setBargainPrice(double bargainPrice) {
            this.bargainPrice = bargainPrice;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public String getDetailUrl() {
            return detailUrl;
        }

        public void setDetailUrl(String detailUrl) {
            this.detailUrl = detailUrl;
        }

        public String getImages() {
            return images;
        }

        public void setImages(String images) {
            this.images = images;
        }

        public int getItemtype() {
            return itemtype;
        }

        public void setItemtype(int itemtype) {
            this.itemtype = itemtype;
        }

        public int getPid() {
            return pid;
        }

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

        public String getPrice() {
            return price;
        }

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

        public int getPscid() {
            return pscid;
        }

        public void setPscid(int pscid) {
            this.pscid = pscid;
        }

        public int getSalenum() {
            return salenum;
        }

        public void setSalenum(int salenum) {
            this.salenum = salenum;
        }

        public int getSellerid() {
            return sellerid;
        }

        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }

        public String getSubhead() {
            return subhead;
        }

        public void setSubhead(String subhead) {
            this.subhead = subhead;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }
    }
}

public class AddBean {

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

public class ModelDetail implements IModel{
    private PresenterDetail presenterDetail;

    public ModelDetail(PresenterDetail presenterDetail) {
        this.presenterDetail = presenterDetail;
    }

    @Override
    public void getData(String basrUrl, Map<String, String> map) {
        Flowable<DetailBean> flowable = RetrofitUtils.getInstance(basrUrl).getApiService().getDetail(map);
        presenterDetail.getNews(flowable);
    }
}

public class ModelAdd implements IModel{
    private PresenterAdd presenterAdd;

    public ModelAdd(PresenterAdd presenterAdd) {
        this.presenterAdd = presenterAdd;
    }

    @Override
    public void getData(String basrUrl, Map<String, String> map) {
        Flowable<AddBean> flowable = RetrofitUtils.getInstance(basrUrl).getApiService().getAdd(map);
        presenterAdd.getNews(flowable);
    }

public class PresenterDetail implements IPresenter{
    private IView iView;
    private DisposableSubscriber<DetailBean> subscriber;

    public PresenterDetail(IView iView) {
        this.iView = iView;
    }
    public void detechView(){
        if(iView!=null){
            iView=null;
        }
        if(subscriber!=null){
            if(!subscriber.isDisposed()){
                subscriber.dispose();
            }
        }
    }

    @Override
    public void getData(String baseUrl, Map<String, String> map) {
        IModel model=new ModelDetail(this);
        model.getData(baseUrl, map);
    }
    public void getNews(Flowable<DetailBean> flowable){
        subscriber=flowable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableSubscriber<DetailBean>() {
                    @Override
                    public void onNext(DetailBean detailBean) {
                        iView.Success(detailBean);
                    }

                    @Override
                    public void onError(Throwable t) {
                        iView.Failed(t);
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

public class PresenterAdd implements IPresenter{
    private IView iView;
    private Context context;
    private DisposableSubscriber<AddBean> subscriber;

    public PresenterAdd(IView iView,Context context) {
        this.iView = iView;
        this.context=context;
    }

    public void delechView(){
        if(iView!=null){
            iView=null;
        }
        if(subscriber!=null){
            if(!subscriber.isDisposed()){
                subscriber.dispose();
            }
        }
    }

    @Override
    public void getData(String baseUrl, Map<String, String> map) {
        IModel model=new ModelAdd(this);
        model.getData(baseUrl, map);
    }
    public void getNews(Flowable<AddBean> flowable){
        subscriber=flowable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableSubscriber<AddBean>() {
                    @Override
                    public void onNext(AddBean addBean) {
                        if(addBean.getCode().equals("0")){
                            Toast.makeText(context,addBean.getMsg(),Toast.LENGTH_SHORT).show();
                        }
                    }

                    @Override
                    public void onError(Throwable t) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}

布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.summary.view.DetailActivity">
<ImageView
    android:id="@+id/detail_img"
    android:layout_width="match_parent"
    android:layout_height="250dp"
    android:src="@mipmap/ic_launcher"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#e2f29c">

        <TextView
            android:id="@+id/detail_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="17dp"
            android:layout_marginTop="12dp"
            android:text="1111111111" />

        <TextView
            android:id="@+id/detail_title2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/detail_title"
            android:layout_below="@+id/detail_title"
            android:layout_marginTop="36dp"
            android:text="2222222222" />

        <TextView
            android:id="@+id/detail_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/detail_title2"
            android:layout_below="@+id/detail_title2"
            android:layout_marginTop="30dp"
            android:text="价格" />

        <Button
            android:id="@+id/detail_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:background="#edaa88"
            android:text="加入购物车" />

        <Button
            android:id="@+id/detail_button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#edaa88"
            android:text="进入购物车"
            android:layout_alignParentBottom="true"
            android:layout_toStartOf="@+id/detail_button"
            android:layout_marginEnd="20dp" />
    </RelativeLayout>
</LinearLayout>

public class DetailActivity extends AppCompatActivity implements IView {

    @BindView(R.id.detail_img)
    ImageView detailImg;
    @BindView(R.id.detail_title)
    TextView detailTitle;
    @BindView(R.id.detail_title2)
    TextView detailTitle2;
    @BindView(R.id.detail_price)
    TextView detailPrice;
    @BindView(R.id.detail_button)
    Button detailButton;
    @BindView(R.id.detail_button2)
    Button detailButton2;
    private PresenterDetail presenterDetail;
    private String pid;
    private PresenterAdd presenterAdd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);
        ButterKnife.bind(this);
        Intent intent=getIntent();
        pid=intent.getStringExtra("pid");
        presenterDetail = new PresenterDetail(this);
        Map<String,String> map=new HashMap<>();
        map.put("source","android");
        map.put("pid",pid);
        presenterDetail.getData("https://www.zhaoapi.cn/",map);

    }

    @Override
    public void Success(Object o) {
        DetailBean detailBean= (DetailBean) o;
        DetailBean.DataBean data = detailBean.getData();
        //图片
        String images = data.getImages();
        String[] split = images.split("!");
        Glide.with(this).load(split[0]).into(detailImg);
        //标题
        detailTitle.setText(data.getSubhead());
        detailTitle2.setText(data.getTitle());
        //价格
        detailPrice.setText("价格:"+data.getPrice());

    }

    @Override
    public void Failed(Throwable t) {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenterDetail.detechView();
        presenterAdd.delechView();
    }

    @OnClick({R.id.detail_button, R.id.detail_button2})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            //加入购物车
            case R.id.detail_button:
                presenterAdd = new PresenterAdd(this,this);
                Map<String,String> map=new HashMap<>();
                map.put("source","android");
                map.put("uid","3809");
                map.put("pid",pid);
                presenterAdd.getData("http://120.27.23.105/",map);
//                CartsBean carts=new CartsBean();
//                if(carts.getCode().equals("0")){
//                    Toast.makeText(this,carts.getMsg(),Toast.LENGTH_SHORT).show();
//                }
                break;
            //进入购物车
            case R.id.detail_button2:
                Intent intent=new Intent(DetailActivity.this,CartsActivity.class);
                startActivity(intent);
                break;
        }
    }

购物车

public class CartsBean {

    /**
     * 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":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":3,"pid":46,"price":234,"pscid":39,"selected":0,"sellerid":2,"subhead":"【iPhone新品上市】新一代iPhone,让智能看起来更不一样","title":"Apple iPhone 8 Plus (A1864) 64GB 金色 移动联通电信4G手机"}],"sellerName":"商家2","sellerid":"2"},{"list":[{"bargainPrice":1599,"createtime":"2017-10-14T21:48:08","detailUrl":"https://item.m.jd.com/product/1993026402.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t5863/302/8961270302/97126/41feade1/5981c81cNc1b1fbef.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7003/250/1488538438/195825/53bf31ba/5981c57eN51e95176.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5665/100/8954482513/43454/418611a9/5981c57eNd5fc97ba.jpg!q70.jpg","num":3,"pid":47,"price":111,"pscid":39,"selected":0,"sellerid":3,"subhead":"碳黑色 32GB 全网通 官方标配   1件","title":"锤子 坚果Pro 特别版 巧克力色 酒红色 全网通 移动联通电信4G手机 双卡双待 碳黑色 32GB 全网通"}],"sellerName":"商家3","sellerid":"3"},{"list":[{"bargainPrice":3455,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/12224420750.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t9106/106/1785172479/537280/253bc0ab/59bf78a7N057e5ff7.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8461/5/1492479653/68388/7255e013/59ba5e84N91091843.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t8803/356/1478945529/489755/2a163ace/59ba5e84N7bb9a666.jpg!q70.jpg","num":2,"pid":48,"price":222,"pscid":39,"selected":0,"sellerid":4,"subhead":"【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机","title":"小米(MI) 小米MIX2 手机 黑色 全网通 (6GB+64GB)【标配版】"}],"sellerName":"商家4","sellerid":"4"},{"list":[{"bargainPrice":22.9,"createtime":"2017-10-14T21:38:26","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":30,"pid":30,"price":688,"pscid":2,"selected":0,"sellerid":7,"subhead":"三只松鼠零食特惠,专区满99减50,满199减100,火速抢购》","title":"三只松鼠 坚果炒货 零食奶油味 碧根果225g/袋"}],"sellerName":"商家7","sellerid":"7"},{"list":[{"bargainPrice":111.99,"createtime":"2017-10-14T21:39:05","detailUrl":"https://item.m.jd.com/product/4719303.html?utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t9004/210/1160833155/647627/ad6be059/59b4f4e1N9a2b1532.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7504/338/63721388/491286/f5957f53/598e95f1N7f2adb87.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t7441/10/64242474/419246/adb30a7d/598e95fbNd989ba0a.jpg!q70.jpg","num":1,"pid":1,"price":118,"pscid":1,"selected":0,"sellerid":17,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}],"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":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;

        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
             * 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)银

             */

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

public class IsnoBean {
    private boolean isno;

    public IsnoBean() {
    }

    public IsnoBean(boolean isno) {
        this.isno = isno;
    }

    public boolean isno() {
        return isno;
    }

    public void setIsno(boolean isno) {
        this.isno = isno;
    }
}

public class ModelCarts implements CardIModel{
    private PresenterCarts presenterCarts;

    public ModelCarts(PresenterCarts presenterCarts) {
        this.presenterCarts = presenterCarts;
    }

    @Override
    public void getData(String basrUrl, Map<String, String> map) {
        Flowable<CartsBean> flowable = RetrofitUtils.getInstance(basrUrl).getApiService().getCarts(map);
        presenterCarts.getNews(flowable);
    }
}

public class PresenterCarts implements CardIPresenter{
    private IView iView;
    private DisposableSubscriber subscriber;
    public PresenterCarts(IView iView) {
        this.iView = iView;
    }
    public void deletchView(){
        if(iView!=null){
            iView=null;
        }
        if(subscriber!=null){
            if(!subscriber.isDisposed()){
                subscriber.dispose();
            }
        }
    }

    @Override
    public void getData(String baseUrl, Map<String, String> map) {
        CardIModel model=new ModelCarts(this);
        model.getData(baseUrl, map);
    }
    public void getNews(Flowable<CartsBean> flowable){
        subscriber = (DisposableSubscriber) flowable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableSubscriber<CartsBean>() {
                    @Override
                    public void onNext(CartsBean cartsBean) {
                        Log.e("PresenterCards",cartsBean.getMsg());
                        iView.Success(cartsBean);
                    }

                    @Override
                    public void onError(Throwable t) {
                        Log.e("PresenterCards","falsed");
                        iView.Failed(t);
                    }

                    @Override
                    public void onComplete() {

                    }
                });     
    }
}

接口

public interface ChiledCheckBox {
    void onChiledBox(boolean isno,int i,int i1);
}
public interface Delete {
    void onDelete(int i,int i1);
}
public interface DownGeshu {
    void onDownGeshu(int num, int i, int i1);
public interface GroupCheckBox {
    void onGroupBox(boolean isno,int i);
public interface UpGeshu {
    void onUpGeshu(int num,int i,int i1);
}

布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.summary.view.CartsActivity">
    <TextView
        android:text="购物车"
        android:textSize="30dp"
        android:textColor="#f95c08"
        android:layout_marginLeft="150dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ExpandableListView
        android:id="@+id/expandablelistview_show"
        android:layout_width="match_parent"
        android:layout_height="900dp"
        android:layout_weight="1"
        android:scrollbars="none"
        android:divider="@null"
        ></ExpandableListView>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#f7b308">
        <CheckBox
            android:id="@+id/cb_all"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <LinearLayout
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginLeft="80dp"
            android:orientation="vertical"

            >
            <TextView
                android:id="@+id/tv_all_price"
                android:textSize="20dp"
                android:text="合计:¥0.0"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
            <TextView
                android:id="@+id/tv_all_geshu"
                android:text="总计:0个商品"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>


        <Button
            android:id="@+id/bt_jeisuan"
            android:text="去结算"
            android:textSize="20dp"
            android:background="#eaff00"
            android:layout_marginLeft="20dp"
            android:layout_width="100dp"
            android:layout_height="wrap_content" />
    </LinearLayout>
</LinearLayout>
store_item

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <CheckBox
        android:id="@+id/store_cb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/store_name_show"
        android:text="AK"
        android:textSize="30dp"
        android:layout_marginLeft="50dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>
commodity_item

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <CheckBox
        android:id="@+id/cb_commodity_show"
        android:layout_gravity="center"
        android:layout_marginLeft="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/commodity_title"
            android:layout_marginTop="20dp"
            android:textStyle="bold"
            android:text="标题"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <ImageView
                android:id="@+id/commodity_img"
                android:src="@mipmap/ic_launcher"
                android:layout_marginTop="30dp"
                android:layout_width="80dp"
                android:layout_height="80dp" />
            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <TextView
                    android:id="@+id/commodity_price"
                    android:text="¥:20"
                    android:textColor="#f00"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
                <TextView
                    android:id="@+id/commodity_color"
                    android:layout_marginTop="10dp"
                    android:text="颜色"
                    android:layout_below="@id/commodity_price"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
                <TextView
                    android:id="@+id/commodity_size"
                    android:layout_toRightOf="@id/commodity_color"
                    android:layout_marginTop="10dp"
                    android:text="尺寸"
                    android:layout_below="@id/commodity_price"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
                <LinearLayout
                    android:layout_below="@id/commodity_color"
                    android:orientation="horizontal"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">
                    <Button
                        android:id="@+id/commodity_geshu_down"
                        android:text="-"
                        android:layout_width="30dp"
                        android:layout_height="wrap_content" />
                    <Button
                        android:text="1"
                        android:id="@+id/commodity_geshu_show"
                        android:layout_width="50dp"
                        android:layout_height="wrap_content" />
                    <Button
                        android:text="+"
                        android:id="@+id/commodity_geshu_up"
                        android:layout_width="30dp"
                        android:layout_height="wrap_content" />
                </LinearLayout>
            </RelativeLayout>
            <Button
                android:id="@+id/commodity_delete"
                android:text="删除"
                android:layout_gravity="center"
                android:layout_marginLeft="40dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

public class CartsActivity extends AppCompatActivity implements View.OnClickListener,IView,GroupCheckBox,ChiledCheckBox,UpGeshu,DownGeshu,Delete {
    List<CartsBean.DataBean> data;
    ExpandableListView exdblv;
    ExpandableListViewAdpt ExdblvAdpt;

    List<IsnoBean> GroupIsno;
    List<List<IsnoBean>> ChiledIsno;

    CheckBox CbAll;
    TextView TvAllPrice;
    TextView TvAllGeshu;
    Button BtnJiesuan;

    int allprice = 0;
    int allgeshu = 0;
    private PresenterCarts presenterCarts;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_carts);
        data=new ArrayList<CartsBean.DataBean>();
        exdblv = (ExpandableListView) findViewById(R.id.expandablelistview_show);
        CbAll = (CheckBox) findViewById(R.id.cb_all);
        TvAllPrice = (TextView) findViewById(R.id.tv_all_price);
        TvAllGeshu = (TextView) findViewById(R.id.tv_all_geshu);
        BtnJiesuan = (Button) findViewById(R.id.bt_jeisuan);

        //P层
        presenterCarts = new PresenterCarts(this);
        Map<String,String> map=new HashMap<>();
        map.put("source","android");
        map.put("uid","3809");
        presenterCarts.getData("http://120.27.23.105/",map);

        //总的复选框点击事件
        CbAll.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.cb_all:
                boolean checked = CbAll.isChecked();
                for(int i=0;i<GroupIsno.size();i++){
                    GroupIsno.get(i).setIsno(checked);
                    List<IsnoBean> isnoBeen = ChiledIsno.get(i);
                    for(int j=0;j<isnoBeen.size();j++){
                        isnoBeen.get(j).setIsno(checked);
                    }
                }
                ExdblvAdpt.notifyDataSetChanged();
                ZongjiaAndGeshu();
                break;
        }
    }

    @Override
    public void Success(Object o) {
        CartsBean cartsBean= (CartsBean) o;
        List<CartsBean.DataBean> data1 = cartsBean.getData();
        data.addAll(data1);
        Log.i("aaaaaaaaaa",data1.toString());
        //复选框选择状态的集合
        GroupIsno = new ArrayList<IsnoBean>();
        ChiledIsno = new ArrayList<List<IsnoBean>>();
        for(int i=0;i<data.size();i++){
            GroupIsno.add(new IsnoBean(false));
            List<IsnoBean> li = new ArrayList<IsnoBean>();
            for(int j=0;j<data.get(i).getList().size();j++){
                li.add(new IsnoBean(false));
            }
            ChiledIsno.add(li);
        }

        //适配器
        ExdblvAdpt = new ExpandableListViewAdpt(this,data,GroupIsno,ChiledIsno);
        ExdblvAdpt.setOnGroupCheckBox(this);
        ExdblvAdpt.setOnChiledCheckBox(this);
        ExdblvAdpt.setOnUpGeshu(this);
        ExdblvAdpt.setOnDownGeshu(this);
        ExdblvAdpt.setOnDelete(this);

        //配置适配器
        exdblv.setAdapter(ExdblvAdpt);
        ExdblvAdpt.notifyDataSetChanged();

        int groupCount = exdblv.getCount();
        for (int i=0; i<groupCount; i++) {
            exdblv.expandGroup(i);
        };
        exdblv.setGroupIndicator(null);
    }

    @Override
    public void Failed(Throwable t) {
        Log.i("bbbbbbbbb","失败");
    }

    @Override
    public void onDelete(int i, int i1) {
        data.get(i).getList().remove(i1);
        ChiledIsno.get(i).remove(i1);

        GaiGroupChexkBox(i);

        DeleteDianpu(i);

        ZongjiaAndGeshu();
    }

    @Override
    public void onUpGeshu(int num, int i, int i1) {
        data.get(i).getList().get(i1).setNum(num);
        ExdblvAdpt.notifyDataSetChanged();
        ZongjiaAndGeshu();
    }

    @Override
    public void onDownGeshu(int num, int i, int i1) {
        data.get(i).getList().get(i1).setNum(num);
        if(data.get(i).getList().get(i1).getNum()==0){
            data.get(i).getList().remove(i1);
            ChiledIsno.get(i).remove(i1);
        }
        GaiGroupChexkBox(i);

        DeleteDianpu(i);

        ZongjiaAndGeshu();
    }

    @Override
    public void onGroupBox(boolean isno, int i) {
        GroupIsno.get(i).setIsno(isno);
        List<IsnoBean> isnoBeen = ChiledIsno.get(i);
        for(int u=0;u<isnoBeen.size();u++){
            isnoBeen.get(u).setIsno(isno);
        }
        ExdblvAdpt.notifyDataSetChanged();

        AllCheckBox();

        ZongjiaAndGeshu();
    }

    @Override
    public void onChiledBox(boolean isno, int i, int i1) {
        ChiledIsno.get(i).get(i1).setIsno(isno);

        GaiGroupChexkBox(i);

        ExdblvAdpt.notifyDataSetChanged();

        AllCheckBox();

        ZongjiaAndGeshu();
    }
    //算总价格和总个数---每次点击事件完之后都调用此方法
    public void ZongjiaAndGeshu(){
        allprice = 0;
        allgeshu = 0;
        for(int i=0;i<ChiledIsno.size();i++){
            List<IsnoBean> isnoBeen = ChiledIsno.get(i);
            for(int j=0;j<isnoBeen.size();j++){
                CartsBean.DataBean.ListBean listBean = data.get(i).getList().get(j);
                if(isnoBeen.get(j).isno()){
                    allprice+=(int)(listBean.getNum()*listBean.getBargainPrice());
                    allgeshu+=listBean.getNum();
                }
            }
        }
        TvAllPrice.setText("总价:¥"+allprice);
        TvAllGeshu.setText("共"+allgeshu+"件商品");
    }
    //根据所有GroupCheckBox的状态,改变总的复选框状态
    private void AllCheckBox() {
        int e = 0;
        for(int r=0;r<GroupIsno.size();r++){
            if(!GroupIsno.get(r).isno()){
                e = 1;
            }
        }
        if(e==0){
            CbAll.setChecked(true);
        }else{
            CbAll.setChecked(false);
        }
    }
    //根据商品的复选框改变店铺的复选框状态
    private void GaiGroupChexkBox(int i) {
        int t = 0;
        for(int p=0;p<ChiledIsno.get(i).size();p++){
            if(!ChiledIsno.get(i).get(p).isno()){
                t = 1;
            }
        }
        if(t==0){
            GroupIsno.get(i).setIsno(true);
        }else{
            GroupIsno.get(i).setIsno(false);
        }
    }
    //删除店铺
    private void DeleteDianpu(int i) {
        if(data.get(i).getList()==null||data.get(i).getList().size()<1){
            data.remove(i);
            GroupIsno.remove(i);
            ChiledIsno.remove(i);
        }
        ExdblvAdpt.notifyDataSetChanged();
        AllCheckBox();
        if(data==null||data.size()<1){
            CbAll.setChecked(false);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenterCarts.deletchView();
    }
}
 
ExpandableListViewAdpt
public class ExpandableListViewAdpt extends BaseExpandableListAdapter{
    Context context;
    //店家,商品数据
    List<CartsBean.DataBean> data;

    //复选框传值集合
    List<IsnoBean> GroupIsno;   //Group集合
    List<List<IsnoBean>> ChiledIsno;   //Chiled集合
    //有参构造
    public ExpandableListViewAdpt(Context context, List<CartsBean.DataBean> data, List<IsnoBean> GroupIsno, List<List<IsnoBean>> ChiledIsno) {
        this.context = context;
        this.data = data;
        this.GroupIsno = GroupIsno;
        this.ChiledIsno = ChiledIsno;
    }
    //GroupCheckBox接口
    private GroupCheckBox groupcheckbox;
    public void setOnGroupCheckBox(GroupCheckBox groupcheckbox){
        this.groupcheckbox = groupcheckbox;
    }
    //ChiledCheckBox接口
    private ChiledCheckBox chiledcheckbox;
    public void setOnChiledCheckBox(ChiledCheckBox chiledcheckbox){
        this.chiledcheckbox = chiledcheckbox;
    }
    //加商品个数的接口
    private UpGeshu upgeshu;
    public void setOnUpGeshu(UpGeshu upgeshu){
        this.upgeshu = upgeshu;
    }
    //减商品个数的接口
    private DownGeshu downgeshu;
    public void setOnDownGeshu(DownGeshu downgeshu){
        this.downgeshu = downgeshu;
    }
    //删除商品的接口
    private Delete delete;
    public void setOnDelete(Delete delete){
        this.delete = delete;
    }
    @Override
    public int getGroupCount() {
        return data.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return data.get(groupPosition).getList().size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return data.get(groupPosition);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return data.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 view, ViewGroup parent) {
        final CartsBean.DataBean dataBean = data.get(groupPosition);
        final IsnoBean isnoBean = GroupIsno.get(groupPosition);
        final ViewHodler1 vh1;
        if(view==null){
            vh1 = new ViewHodler1();
            view = View.inflate(context, R.layout.store_item,null);
            vh1.CbStore = (CheckBox) view.findViewById(R.id.store_cb);
            vh1.TvStoreName = (TextView) view.findViewById(R.id.store_name_show);
            view.setTag(vh1);
        }else{
            vh1 = (ViewHodler1) view.getTag();
        }
        vh1.TvStoreName.setText(dataBean.getSellerName());
        //复选框
        vh1.CbStore.setChecked(isnoBean.isno());//false
        vh1.CbStore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                boolean checked = vh1.CbStore.isChecked();
                groupcheckbox.onGroupBox(checked,groupPosition);
            }
        });
        //返回当前视图
        return view;

    }

    @Override
    public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) {
        //本商品
        final CartsBean.DataBean.ListBean listBean = data.get(i).getList().get(i1);
        //本商品的复选框的值
        final IsnoBean bisnoBean = ChiledIsno.get(i).get(i1);
        final ViewHolder2 vh2;
        if(view==null){
            vh2 = new ViewHolder2();
            view = View.inflate(context, R.layout.commodity_item,null);
            vh2.CbCommodity = (CheckBox) view.findViewById(R.id.cb_commodity_show);
            vh2.ImgCommodityPicture = (ImageView) view.findViewById(R.id.commodity_img);
            vh2.TvCommodityTitle = (TextView) view.findViewById(R.id.commodity_title);
            vh2.TvCommodityPrice = (TextView) view.findViewById(R.id.commodity_price);
            vh2.TvCommodityColor = (TextView) view.findViewById(R.id.commodity_color);
            vh2.TvCommoditySize = (TextView) view.findViewById(R.id.commodity_size);
            vh2.BtnCommodityUp = (Button) view.findViewById(R.id.commodity_geshu_up);
            vh2.BtnCommodityShow = (Button) view.findViewById(R.id.commodity_geshu_show);
            vh2.BtnCommodityDown = (Button) view.findViewById(R.id.commodity_geshu_down);
            vh2.BtnCommodityDelete = (Button) view.findViewById(R.id.commodity_delete);
            view.setTag(vh2);
        }else{
            vh2 = (ViewHolder2) view.getTag();
        }
        // String[] split = listBean.getImages().split("\\|");//vh2.ImgCommodityPicture
        String images = data.get(i).getList().get(i1).getImages();
        String[] split1 = images.split("\\|");
        Glide.with(context).load(split1[0]).into(vh2.ImgCommodityPicture);
        //ImageLoader.getInstance().displayImage(split[0],vh2.ImgCommodityPicture);
        vh2.TvCommodityTitle.setText(listBean.getTitle());
        vh2.TvCommodityPrice.setText("¥:"+(int)listBean.getBargainPrice());
        vh2.TvCommodityColor.setText("颜色:"+listBean.getPrice());
        vh2.TvCommoditySize.setText("尺寸:"+listBean.getPid()+"L");
        vh2.BtnCommodityShow.setText(listBean.getNum()+"");

        //复选框
        vh2.CbCommodity.setChecked(bisnoBean.isno());
        vh2.CbCommodity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                boolean checked = vh2.CbCommodity.isChecked();
                chiledcheckbox.onChiledBox(checked,i,i1);
            }
        });

        //加个数
        vh2.BtnCommodityUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String s = vh2.BtnCommodityShow.getText().toString();
                int num = Integer.valueOf(s).intValue();
                num++;
                upgeshu.onUpGeshu(num,i,i1);
            }
        });

        //减个数
        vh2.BtnCommodityDown.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String s = vh2.BtnCommodityShow.getText().toString();
                int num = Integer.valueOf(s).intValue();
                num--;
                downgeshu.onDownGeshu(num,i,i1);
            }
        });

        //删除
        vh2.BtnCommodityDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                delete.onDelete(i,i1);
            }
        });
        //返回当前视图
        return view;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
    class ViewHodler1{
        private CheckBox CbStore;
        private TextView TvStoreName;
    }
    class ViewHolder2{
        private CheckBox CbCommodity;
        private TextView TvCommodityTitle;
        private ImageView ImgCommodityPicture;
        private TextView TvCommodityPrice;
        private TextView TvCommodityColor;
        private TextView TvCommoditySize;
        private Button BtnCommodityUp;
        private Button BtnCommodityShow;
        private Button BtnCommodityDown;
        private Button BtnCommodityDelete;
    }
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值