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