1 网络权限
2. 依赖
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4' compile 'com.google.code.gson:gson:2.6.2' compile 'io.reactivex:rxandroid:1.2.1' compile 'com.squareup.okhttp3:logging-interceptor:3.4.1' compile 'com.squareup.okhttp3:okhttp:3.4.1' compile 'com.facebook.fresco:fresco:0.14.1' compile 'com.facebook.fresco:webpsupport:0.14.1' compile 'com.facebook.fresco:animated-gif:0.14.1' compile 'org.greenrobot:eventbus:3.0.0' 代码 eventbus传递类//
package com.example.mygwc.eventbus; /** * Created by Administrator on 2018/4/30 0030. */ public class UpdateGwcoriginalgwcz { private String f; public UpdateGwcoriginalgwcz(String f) { this.f = f; } public String getF() { return f; } public void setF(String f) { this.f = f; } }入口函数/
package com.example.mygwc; import android.app.Application; import com.facebook.drawee.backends.pipeline.Fresco; /** * Created by Administrator on 2018/4/30 0030. */ public class RuKou extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } }自定义加减/
package com.example.mygwc.zdyview; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.example.mygwc.R; /** * Created by Administrator on 2018/4/30 0030. */ public class Jiajianoriginalgwcz extends LinearLayout implements View.OnClickListener { private TextView add; private TextView lession; private EditText num; private Context context; public Jiajianoriginalgwcz(Context context) { this(context,null); } public Jiajianoriginalgwcz(Context context, AttributeSet attrs) { this(context, attrs,0); } public Jiajianoriginalgwcz(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); View v=View.inflate(context,R.layout.jiajianitemoriginalgwcz,this); this.context=context; add = v.findViewById(R.id.add); lession = v.findViewById(R.id.lession); num =v.findViewById(R.id.num); add.setOnClickListener(this); lession.setOnClickListener(this); } private Oncount oncount; @Override public void onClick(View v) { switch(v.getId()){ case R.id.add: String edit=num.getText().toString(); int ed=Integer.valueOf(edit); ed++; num.setText(ed+""); oncount.onadd(ed); Log.d("xdcxdc","点击了+号"+ed); break; case R.id.lession: String edit2=num.getText().toString(); int ed2=Integer.valueOf(edit2); Log.d("xdcxdc","点击了-号"+ed2); if(ed2<=1){ Toast.makeText(context,"不能少了",Toast.LENGTH_SHORT).show(); }else{ ed2--; num.setText(ed2+""); oncount.onlession(ed2); } break; } } public interface Oncount{ void onadd(int num); void onlession(int num); } public void oncountset(Oncount oncount){ this.oncount=oncount; } public void setnum(String d){ num.setText(d); } public String getnum(){ return num.getText().toString().trim(); } }
MainActivity/
package com.example.mygwc; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.view.WindowManager; import android.widget.CheckBox; import android.widget.ExpandableListView; import android.widget.TextView; import com.example.mygwc.eventbus.UpdateGwcoriginalgwcz; import com.example.mygwc.gwc.MyExpandableAdapteroriginalgwcz; import com.example.mygwc.presenter.LoginPresenteroriginalgwcz; import com.example.mygwc.presenter.Presenteroriginalgwcz; import com.example.mygwc.retrofit.Beanoriginalgwcz; import com.example.mygwc.view.LoginVieworiginalgwcz; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements LoginVieworiginalgwcz { private LoginPresenteroriginalgwcz loginPresenter; private ExpandableListView eplistview; private List<String> dian=new ArrayList<>(); private List<Beanoriginalgwcz.DataBean.ListBean> dianyuan=new ArrayList<>(); private List<List<Beanoriginalgwcz.DataBean.ListBean>> ylist=new ArrayList<>(); private List<Beanoriginalgwcz> listda=new ArrayList<>(); private MyExpandableAdapteroriginalgwcz adapter; private int f; private TextView gwc_allprice; private int l=0; public Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what==158){ gwc_allprice.setText(""); Log.d("dthhyjtbfgfsb","改了"); } Bundle b = msg.getData(); String g = (String) b.get("aprice"); gwc_allprice.setText(g); Log.d("yhnujm", "走到这里" + g); } }; private CheckBox checkBox; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); setContentView(R.layout.activity_main); gwc_allprice = (TextView) findViewById(R.id.gwc_allprice); checkBox = (CheckBox) findViewById(R.id.gwc_chackall); EventBus.getDefault().register(MainActivity.this); eplistview = (ExpandableListView) findViewById(R.id.eplistview); loginPresenter=new Presenteroriginalgwcz(this); loginPresenter.chuan("71"); //点击全选按钮 checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { for(int i=0;i<listda.get(0).getData().size();i++){ listda.get(0).getData().get(i).setMomcheck(true); adapter.notifyDataSetChanged(); } if(!checkBox.isChecked()){ for(int i=0;i<listda.get(0).getData().size();i++){ listda.get(0).getData().get(i).setMomcheck(false); handler.sendEmptyMessage(158); Log.d("dthhyjtbfgfsb","成功"); adapter.notifyDataSetChanged(); } } } }); } //购物车开始 @Override public void success(Beanoriginalgwcz bean) { if(l==0){ dian.clear(); listda.clear(); listda.add(bean); /*for(int i=0;i<bean.getData().size();i++){ for(int j=0;j<bean.getData().get(i).getList().size();j++){ dianyuan.add(bean.getData().get(i).getList().get(j)); ylist.add(dianyuan); } }*/ //遍历店铺 Log.d("rtrtrt",bean.getData().size()+""); for(int i=0;i<bean.getData().size();i++){ dian.add(bean.getData().get(i).getSellerName()); } //遍历商品 adapter = new MyExpandableAdapteroriginalgwcz(dian,bean,MainActivity.this); eplistview.setAdapter(adapter); l=1; for(int i = 0; i <adapter.getGroupCount();i++){ eplistview.expandGroup(i); } }else{ listda.clear(); listda.add(bean); } } @Override public void update() { } @Override public void updatenonum() { } @Override public void deletegwctiaomu(String d) { } @Subscribe(threadMode = ThreadMode.MAIN) public void kkk(UpdateGwcoriginalgwcz d){ boolean yhj=true; int allprice = 0; f=0; Log.d("ujklp","打一个1"); for(int i=0;i<listda.get(0).getData().size();i++){ for(int j=0;j<listda.get(0).getData().get(i).getList().size();j++){ Log.d("ujklp","打一个2 "+listda.get(0).getData().get(i).getList().get(j).getSelected()); //明明接口中都是0 为什么遍历出来的都是1 int y=listda.get(0).getData().get(i).getList().get(j).getSelected(); Log.d("qwertgfdsa",y+""); if(listda.get(0).getData().get(i).getList().get(j).getSelected()==1){ Log.d("wsxzwsxz",listda.get(0).getData().get(i).getList().get(j).getNum()+" "+listda.get(0).getData().get(i).getList().get(j).getPrice()); int tg=(int)(listda.get(0).getData().get(i).getList().get(j).getNum()*listda.get(0).getData().get(i).getList().get(j).getPrice()); allprice+=tg; f=0; f=allprice; Log.d("poiuytrewq"," f= "+f+" allprice ="+allprice); Message message=new Message(); Bundle bundle=new Bundle(); bundle.putString("aprice",f+""); message.setData(bundle); handler.sendMessage(message); } /* if(listda.get(0).getData().get(i).getList().get(j).getSelected()==0){ yhj=true; }else{ yhj=false; } */ } } /* if(yhj==true){ handler.sendEmptyMessage(0); }*/ } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(MainActivity.this); if(loginPresenter!=null){ loginPresenter.onBindDestory(); } } } mvp/// view
package com.example.mygwc.view; import com.example.mygwc.retrofit.Beanoriginalgwcz; /** * Created by Administrator on 2018/4/29 0029. */ public interface LoginVieworiginalgwcz { void success(Beanoriginalgwcz bean); void update(); void updatenonum(); void deletegwctiaomu(String d); } model接口//
package com.example.mygwc.model; import com.example.mygwc.retrofit.Beanoriginalgwcz; /** * Created by Administrator on 2018/4/29 0029. */ public interface LoginModeloriginalgwcz { interface Inside{ void success(Beanoriginalgwcz bean); void update(); void updatenonum(); void deletegwctiaomu(String d); } void vityy(String uid,Inside inside); void vityyupdate(String uid,String sellerid,int pid,int num,Inside inside); void vityynonum(String uid,String sellerid,int pid,int selected,Inside inside); void vityydeletegwc(String uid,String pid,Inside inside); }model 类///
package com.example.mygwc.model; import android.util.Log; import com.example.mygwc.retrofit.ApiServiceoriginalgwcz; import com.example.mygwc.retrofit.Beanoriginalgwcz; import com.example.mygwc.retrofit.DeleteBeanoriginalgwcz; import com.example.mygwc.retrofit.RetrofitUtilsoriginalgwcz; import com.example.mygwc.retrofit.UpdateBeanoriginalgwcz; import java.util.HashMap; import java.util.Map; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; /** * Created by Administrator on 2018/4/29 0029. */ public class Modeloriginalgwcz implements LoginModeloriginalgwcz { private RetrofitUtilsoriginalgwcz retrofitUtils; @Override public void vityy(String uid, final Inside inside) { Map<String,String> map=new HashMap<>(); map.put("uid",uid); retrofitUtils = RetrofitUtilsoriginalgwcz.getInstance(); retrofitUtils.getNews() .create(ApiServiceoriginalgwcz.class) .gett(map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<Beanoriginalgwcz>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { Log.d("mmm",e.getMessage()); } @Override public void onNext(Beanoriginalgwcz bean) { if(bean!=null){ inside.success(bean); } } }); } //更改num @Override public void vityyupdate(String uid, String sellerid, int pid,int num, Inside inside) { retrofitUtils = RetrofitUtilsoriginalgwcz.getInstance(); retrofitUtils.getNews() .create(ApiServiceoriginalgwcz.class) .getupdate(uid,sellerid,pid,num) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<UpdateBeanoriginalgwcz>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { Log.d("mmm",e.getMessage()); } @Override public void onNext(UpdateBeanoriginalgwcz bean) { } }); } //更改选中状态 @Override public void vityynonum(String uid, String sellerid, int pid, int selected, Inside inside) { //http://120.27.23.105/product/updateCarts?uid=71&sellerid=1&pid=1&selected=0&num=10 Log.d("dfgvcdfgvc","uid "+uid+" sellerid "+sellerid+" pid "+pid+" selected "+selected); retrofitUtils = RetrofitUtilsoriginalgwcz.getInstance(); retrofitUtils.getNews() .create(ApiServiceoriginalgwcz.class) .getupdatenonum(uid,sellerid,pid,selected) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<UpdateBeanoriginalgwcz>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { Log.d("notnum",e.getMessage()); } @Override public void onNext(UpdateBeanoriginalgwcz bean){ // Log.d("bhjbhj",bean.getMsg().toString()); } }); } @Override public void vityydeletegwc(String uid, String pid, final Inside inside) { Map<String,String> map=new HashMap<>(); map.put("uid",uid); map.put("pid",pid); retrofitUtils = RetrofitUtilsoriginalgwcz.getInstance(); retrofitUtils.getNews() .create(ApiServiceoriginalgwcz.class) .getdelete(map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<DeleteBeanoriginalgwcz>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { Log.d("mmm",e.getMessage()); } @Override public void onNext(DeleteBeanoriginalgwcz bean) { if(bean!=null){ inside.deletegwctiaomu(bean.getMsg().toString()); } } }); } }
p层接口
package com.example.mygwc.presenter; /** * Created by Administrator on 2018/4/29 0029. */ public interface LoginPresenteroriginalgwcz { void chuan(String uid); void updatechuan(String uid, String sellerid, int pid, int num); void updatenonum(String uid, String sellerid, int pid, int selected); void deletegwcchan(String uid,String pid); void onBindDestory(); }
p层类
package com.example.mygwc.presenter; import com.example.mygwc.model.LoginModeloriginalgwcz; import com.example.mygwc.model.Modeloriginalgwcz; import com.example.mygwc.retrofit.Beanoriginalgwcz; import com.example.mygwc.view.LoginVieworiginalgwcz; /** * Created by Administrator on 2018/4/29 0029. */ public class Presenteroriginalgwcz implements LoginPresenteroriginalgwcz,LoginModeloriginalgwcz.Inside { private LoginVieworiginalgwcz loginView; private LoginModeloriginalgwcz loginModel; public Presenteroriginalgwcz(LoginVieworiginalgwcz loginView){ this.loginView=loginView; this.loginModel=new Modeloriginalgwcz(); } @Override public void chuan(String uid) { loginModel.vityy(uid,this); } @Override public void updatechuan(String uid, String sellerid, int pid,int num) { loginModel.vityyupdate(uid,sellerid,pid,num,this); } @Override public void updatenonum(String uid, String sellerid, int pid, int selected) { loginModel.vityynonum(uid,sellerid,pid,selected,this); } @Override public void deletegwcchan(String uid, String pid) { loginModel.vityydeletegwc(uid,pid,this); } @Override public void onBindDestory() { if(loginView!=null){ loginView=null; } } @Override public void success(Beanoriginalgwcz bean) { loginView.success(bean); } @Override public void update() { loginView.update(); } @Override public void updatenonum() { loginView.updatenonum(); } @Override public void deletegwctiaomu(String d) { loginView.deletegwctiaomu(d); } } 网络请求工具类 service///
package com.example.mygwc.retrofit; import java.util.Map; import retrofit2.http.GET; import retrofit2.http.Query; import retrofit2.http.QueryMap; import rx.Observable; /** * Created by Administrator on 2018/4/29 0029. */ public interface ApiServiceoriginalgwcz { //http://120.27.23.105/product/getCarts @GET("product/getCarts") Observable<Beanoriginalgwcz> gett(@QueryMap Map<String,String> map); //http://120.27.23.105/product/updateCarts?uid=71&sellerid=1&pid=1&selected=0&num=10 @GET("product/updateCarts") Observable<UpdateBeanoriginalgwcz> getupdate(@Query("uid") String uid, @Query("sellerid") String sellerid, @Query("pid") int pid, @Query("num") int num); //不传num的(最后一位) @GET("product/updateCarts") Observable<UpdateBeanoriginalgwcz> getupdatenonum(@Query("uid") String uid, @Query("sellerid") String sellerid, @Query("pid") int pid, @Query("selected") int selected); //http://120.27.23.105/product/deleteCart?uid=72&pid=1 //删除购物车 @GET("product/deleteCart") Observable<DeleteBeanoriginalgwcz> getdelete(@QueryMap Map<String,String> map); } //查询购物车的实体类 需要添加的/
父条目的选中状态 private boolean momcheck=false; //用来决定父条目的选中状态 private boolean fumomcheck=false; public boolean isFumomcheck() { return fumomcheck; } public void setFumomcheck(boolean fumomcheck) { this.fumomcheck = fumomcheck; } public boolean isMomcheck() { return momcheck; } public void setMomcheck(boolean momcheck) { this.momcheck = momcheck; }整体的实体类 包含上边的
package com.example.mygwc.retrofit; import java.util.List; /** * Created by Administrator on 2018/4/29 0029. */ public class Beanoriginalgwcz { /** * msg : 请求成功 * code : 0 * data : [{"list":[{"bargainPrice":99,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/4345173.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6037/35/2944615848/95178/6cd6cff0/594a3a10Na4ec7f39.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6607/258/1025744923/75738/da120a2d/594a3a12Ne3e6bc56.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6370/292/1057025420/64655/f87644e3/594a3a12N5b900606.jpg!q70.jpg","num":1,"pid":45,"price":2999,"pscid":39,"selected":0,"sellerid":1,"subhead":"高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽!","title":"一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机"}],"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":2,"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":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","num":1,"pid":49,"price":333,"pscid":39,"selected":0,"sellerid":5,"subhead":"vivo X20 带你开启全面屏时代!逆光也清晰,照亮你的美!","title":"vivo X20 全面屏手机 全网通 4GB+64GB 金色 移动联通电信4G手机 双卡双待"}],"sellerName":"商家5","sellerid":"5"},{"list":[{"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","num":1,"pid":50,"price":444,"pscid":39,"selected":0,"sellerid":6,"subhead":"【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机","title":"小米(MI) 小米MIX2 手机 黑色 全网通 (6GB+64GB)【标配版】"}],"sellerName":"商家6","sellerid":"6"},{"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":19,"price":499,"pscid":1,"selected":0,"sellerid":12,"subhead":"每个中秋都不能简单,无论身在何处,你总需要一块饼让生活更圆满,京东月饼让爱更圆满京东自营,闪电配送,更多惊喜,快用手指戳一下","title":"北京稻香村 稻香村中秋节月饼 老北京月饼礼盒655g"}],"sellerName":"商家12","sellerid":"12"}] */ private String msg; private String code; private List<DataBean> data; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { /** * list : [{"bargainPrice":99,"createtime":"2017-10-14T21:38:26","detailUrl":"https://item.m.jd.com/product/4345173.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6037/35/2944615848/95178/6cd6cff0/594a3a10Na4ec7f39.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6607/258/1025744923/75738/da120a2d/594a3a12Ne3e6bc56.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6370/292/1057025420/64655/f87644e3/594a3a12N5b900606.jpg!q70.jpg","num":1,"pid":45,"price":2999,"pscid":39,"selected":0,"sellerid":1,"subhead":"高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽!","title":"一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机"}] * sellerName : 商家1 * sellerid : 1 */ private String sellerName; private String sellerid; private List<ListBean> list; 父条目的选中状态 private boolean momcheck=false; //用来决定父条目的选中状态 private boolean fumomcheck=false; public boolean isFumomcheck() { return fumomcheck; } public void setFumomcheck(boolean fumomcheck) { this.fumomcheck = fumomcheck; } public boolean isMomcheck() { return momcheck; } public void setMomcheck(boolean momcheck) { this.momcheck = momcheck; } public String getSellerName() { return sellerName; } public void setSellerName(String sellerName) { this.sellerName = sellerName; } public String getSellerid() { return sellerid; } public void setSellerid(String sellerid) { this.sellerid = sellerid; } public List<ListBean> getList() { return list; } public void setList(List<ListBean> list) { this.list = list; } public static class ListBean { /** * bargainPrice : 99.0 * createtime : 2017-10-14T21:38:26 * detailUrl : https://item.m.jd.com/product/4345173.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends * images : https://m.360buyimg.com/n0/jfs/t6037/35/2944615848/95178/6cd6cff0/594a3a10Na4ec7f39.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6607/258/1025744923/75738/da120a2d/594a3a12Ne3e6bc56.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t6370/292/1057025420/64655/f87644e3/594a3a12N5b900606.jpg!q70.jpg * num : 1 * pid : 45 * price : 2999.0 * pscid : 39 * selected : 0 * sellerid : 1 * subhead : 高清双摄,就是清晰!2000+1600万高清摄像头,6GB大内存+高通骁龙835处理器,性能怪兽! * title : 一加手机5 (A5000) 6GB+64GB 月岩灰 全网通 双卡双待 移动联通电信4G手机 */ private double bargainPrice; private String createtime; private String detailUrl; private String images; private int num; private int pid; private double price; private int pscid; private int selected; private int sellerid; private String subhead; private String title; 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; } } } }retrofit的应用拦截器 添加公共参数///
package com.example.mygwc.retrofit; import android.util.Log; import java.io.IOException; import okhttp3.FormBody; import okhttp3.Interceptor; import okhttp3.Request; import okhttp3.Response; /** * Created by Administrator on 2018/5/2 0002. */ public class CommonParamsinterceptororiginalgwcz implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { //得到原始的请求对象 Request request=chain.request(); //得到请求方式 String method=request.method(); if("GET".equals(method)){ //去除原始的URL String oldurl=request.url().toString(); //拼接公共参数 // String newurl=oldurl+"source=android&appVersion=101"; String[] f=oldurl.split("\\?"); String s=f[0]+"?source=android&"+f[1]; Log.d("fff",s.toString()); //构建新的request request=new Request.Builder() .url(s) .build(); }else if("POST".equals(method)){ //取出旧的参数和URL FormBody body=(FormBody)request.body(); String oldUrl=request.url().toString(); //构建新的FromBody FormBody.Builder newFormBody = new FormBody.Builder(); for (int i = 0; i < body.size();i++){ String key = body.name(i);//keywors String value = body.value(i);//value newFormBody.add(key,value); } //公共参数 newFormBody.add("source","android"); newFormBody.add("appVersion","101"); //新构建的reqeust request = new Request.Builder() .url(oldUrl) .post(newFormBody.build()) .build(); } return chain.proceed(request); } }删除购物车的实体类//
package com.example.mygwc.retrofit; /** * Created by Administrator on 2018/5/3 0003. */ public class DeleteBeanoriginalgwcz { /** * 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; } }
retrofit请求工具类///
package com.example.mygwc.retrofit; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by Administrator on 2018/4/29 0029. */ public class RetrofitUtilsoriginalgwcz { private static volatile RetrofitUtilsoriginalgwcz instance; public static RetrofitUtilsoriginalgwcz getInstance(){ if(instance==null){ synchronized (RetrofitUtilsoriginalgwcz.class){ if(instance==null){ instance=new RetrofitUtilsoriginalgwcz(); } } } return instance; } public Retrofit getNews(){ //http://120.27.23.105/product/getCarts //http://120.27.23.105 String baseUrl= "http://120.27.23.105/"; HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BASIC); OkHttpClient okHttpClient=new OkHttpClient.Builder() .addInterceptor(new CommonParamsinterceptororiginalgwcz()) .addInterceptor(interceptor) .build(); Retrofit retrofit=new Retrofit.Builder() .baseUrl(baseUrl) .client(okHttpClient) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); return retrofit; } }更新购物车的实体类 用不到//
package com.example.mygwc.retrofit; /** * Created by Administrator on 2018/5/1 0001. */ public class UpdateBeanoriginalgwcz { /** * msg : success * 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; } } 最重要的 二级列表适配器/
package com.example.mygwc.gwc; import android.content.Context; import android.net.Uri; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; import com.example.mygwc.R; import com.example.mygwc.eventbus.UpdateGwcoriginalgwcz; import com.example.mygwc.presenter.LoginPresenteroriginalgwcz; import com.example.mygwc.presenter.Presenteroriginalgwcz; import com.example.mygwc.retrofit.Beanoriginalgwcz; import com.example.mygwc.view.LoginVieworiginalgwcz; import com.example.mygwc.zdyview.Jiajianoriginalgwcz; import com.facebook.drawee.drawable.ScalingUtils; import com.facebook.drawee.generic.GenericDraweeHierarchy; import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder; import com.facebook.drawee.view.SimpleDraweeView; import org.greenrobot.eventbus.EventBus; import java.util.List; import static android.view.View.inflate; /** * Created by Administrator on 2018/4/30 0030. */ public class MyExpandableAdapteroriginalgwcz extends BaseExpandableListAdapter implements LoginVieworiginalgwcz { private List<String> dlist; private Beanoriginalgwcz ylist; private Context context; private LoginPresenteroriginalgwcz loginPresenter; private int allprice; public MyExpandableAdapteroriginalgwcz(List<String> dian, Beanoriginalgwcz dianyuan, Context context){ this.dlist=dian; this.ylist=dianyuan; this.context=context; loginPresenter=new Presenteroriginalgwcz(this); } @Override public int getGroupCount() { return dlist.size(); } @Override public int getChildrenCount(int groupPosition) { Log.d("rrr",ylist.getData().get(groupPosition).getList().size()+""); return ylist.getData().get(groupPosition).getList().size(); } @Override public Object getGroup(int groupPosition) { return dlist.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition) { return ylist.getData().get(groupPosition).getList().get(childPosition); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return false; } @Override public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { final gViewHolder gHolder; if(convertView==null){ convertView= inflate(context, R.layout.gwc_dian_itemoriginalgwcz,null); gHolder=new gViewHolder(); gHolder.dian_name=convertView.findViewById(R.id.gwc_dian_name); gHolder.dian_radio=convertView.findViewById(R.id.gwc_dian_radio); convertView.setTag(gHolder); }else{ gHolder= (gViewHolder) convertView.getTag(); } gHolder.dian_name.setText(dlist.get(groupPosition)); //改变商店的复选框 /* if(ylist.getData().get(groupPosition).isZimomcheck()){ gHolder.dian_radio.setChecked(true); }else{ gHolder.dian_radio.setChecked(false); }*/ /* if(ylist.getData().get(groupPosition).isFumomcheck()){ gHolder.dian_radio.setChecked(true); }else{ gHolder.dian_radio.setChecked(false); }*/ //商家的按钮点击监听 gHolder.dian_radio.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //商家复选框是选中状态 if(gHolder.dian_radio.isChecked()){ Log.d("ujklp","选中"); //给bean类设置商店的选中状态 ylist.getData().get(groupPosition).setMomcheck(true); EventBus.getDefault().post(new UpdateGwcoriginalgwcz("选中")); notifyDataSetChanged(); }else{ ylist.getData().get(groupPosition).setMomcheck(false); EventBus.getDefault().post(new UpdateGwcoriginalgwcz("取消")); Log.d("ujklp","未选中"); notifyDataSetChanged(); } } }); return convertView; } //商品的视图// @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { final cViewHolder cHolder; if(convertView==null){ convertView= inflate(context,R.layout.gwc_yuan_listoriginalgwcz,null); cHolder=new cViewHolder(); cHolder.yuan_check=convertView.findViewById(R.id.gwc_yuan_check); cHolder.jiajian=convertView.findViewById(R.id.gwc_yuan_jiajian); cHolder.yuan_deleteimg=convertView.findViewById(R.id.gwc_yuan_delete); cHolder.yuan_price=convertView.findViewById(R.id.gwc_yuan_price); cHolder.yuan_title=convertView.findViewById(R.id.gwc_yuan_title); cHolder.yuan_simple=convertView.findViewById(R.id.gwc_yuan_simple); convertView.setTag(cHolder); }else{ cHolder= (cViewHolder) convertView.getTag(); } //先把所有的商品的选中状态设置为不选中 // loginPresenter.updatenonum("71",ylist.getData().get(groupPosition).getList().get(childPosition).getSellerid()+"",ylist.getData().get(groupPosition).getList().get(childPosition).getPid(),0); cHolder.yuan_price.setText(ylist.getData().get(groupPosition).getList().get(childPosition).getPrice()+""); cHolder.yuan_title.setText(ylist.getData().get(groupPosition).getList().get(childPosition).getTitle()); cHolder.jiajian.setnum(ylist.getData().get(groupPosition).getList().get(childPosition).getNum()+""); //设置商品的选中状态 //cHolder.jiajian.setnum(ylist.getData().get(groupPosition).getList().get(childPosition).getNum()+""); //从实体类中拿到选中状态 并且修改接口中的状态 if(ylist.getData().get(groupPosition).isMomcheck()){ cHolder.yuan_check.setChecked(true); //这个网络请求有毒 更改失败 或者显示成功实际失败 // loginPresenter.updatenonum("2018",ylist.getData().get(groupPosition).getSellerid(),ylist.getData().get(groupPosition).getList().get(childPosition).getPid(),1); ylist.getData().get(groupPosition).getList().get(childPosition).setSelected(1); EventBus.getDefault().post(new UpdateGwcoriginalgwcz("11")); Log.d("vbvbvb","走了1"); }else{ cHolder.yuan_check.setChecked(false); ylist.getData().get(groupPosition).getList().get(childPosition).setSelected(0); EventBus.getDefault().post(new UpdateGwcoriginalgwcz("11")); } /*String selece=String.valueOf(ylist.getData().get(groupPosition).getList().get(childPosition).getSelected()); if(selece.equals("0")){ cHolder.yuan_check.setChecked(false); }else{ cHolder.yuan_check.setChecked(true); }*/ if(cHolder.yuan_check.isChecked()){ //遍历商品价格相加 int num2=Integer.valueOf(cHolder.jiajian.getnum()); int price=(int) ylist.getData().get(groupPosition).getList().get(childPosition).getPrice(); int y=price*num2; allprice+=y; Log.d("yuyu",allprice+""); } //图片配置 String[] f=ylist.getData().get(groupPosition).getList().get(childPosition).getImages().split("\\|"); GenericDraweeHierarchyBuilder builder=new GenericDraweeHierarchyBuilder(context.getResources()); Uri uri=Uri.parse(f[0]); GenericDraweeHierarchy draweeHierarchy=builder.setActualImageScaleType(ScalingUtils.ScaleType.CENTER_INSIDE).build(); cHolder.yuan_simple.setHierarchy(draweeHierarchy); cHolder.yuan_simple.setImageURI(uri); //加减号控件监听 cHolder.jiajian.oncountset(new Jiajianoriginalgwcz.Oncount() { @Override public void onadd(int num666) { Log.d("loplop",num666+""); ylist.getData().get(groupPosition).getList().get(childPosition).setNum(num666); EventBus.getDefault().post(new UpdateGwcoriginalgwcz("11")); } @Override public void onlession(int num666) { Log.d("koikoi",num666+""); ylist.getData().get(groupPosition).getList().get(childPosition).setNum(num666); EventBus.getDefault().post(new UpdateGwcoriginalgwcz("11")); } }); //店员的复选框监听 cHolder.yuan_check.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(cHolder.yuan_check.isChecked()){ ylist.getData().get(groupPosition).getList().get(childPosition).setSelected(1); EventBus.getDefault().post(new UpdateGwcoriginalgwcz("11")); }else{ ylist.getData().get(groupPosition).getList().get(childPosition).setSelected(0); EventBus.getDefault().post(new UpdateGwcoriginalgwcz("11")); } } }); //删除图片的监听 cHolder.yuan_deleteimg.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("tgbndsfhgdfs","一个"); dlist.remove(groupPosition); loginPresenter.deletegwcchan("71",ylist.getData().get(groupPosition).getList().get(childPosition).getPid()+""); EventBus.getDefault().post(new UpdateGwcoriginalgwcz("11")); notifyDataSetChanged(); } }); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } class gViewHolder{ CheckBox dian_radio; TextView dian_name; } class cViewHolder{ CheckBox yuan_check; SimpleDraweeView yuan_simple; TextView yuan_title; TextView yuan_price; Jiajianoriginalgwcz jiajian; ImageView yuan_deleteimg; } @Override public void success(Beanoriginalgwcz bean) { } @Override public void update() { } @Override public void updatenonum() { //修改接口中的选中状态 回调之后再计算价格 } @Override public void deletegwctiaomu(String d) { loginPresenter.chuan("3406"); } }布局 主布局///
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.mygwc.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:id="@+id/ujmujm" > <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/gwc_chackall" android:layout_gravity="center_vertical" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="全选" android:layout_gravity="center_vertical" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="合计: " android:layout_gravity="center_vertical" android:layout_marginLeft="30dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:id="@+id/gwc_allprice" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="¥" android:textColor="#FF0000" android:layout_gravity="center_vertical" /> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1"> <TextView android:layout_width="90dp" android:layout_height="match_parent" android:layout_gravity="right|center_vertical" android:background="#FF0000" android:textColor="#ffffff" android:text="去结算" android:gravity="center" /> </LinearLayout> </LinearLayout> <ExpandableListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/eplistview" android:layout_above="@+id/ujmujm" android:layout_alignParentTop="true" ></ExpandableListView> </RelativeLayout>
商家的布局/
gwc_dian_itemoriginalgwcz
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#4C95BE" > <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/gwc_dian_radio" android:layout_gravity="center_vertical" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/gwc_dian_name" android:layout_gravity="center_vertical" android:layout_marginLeft="50dp" /> </LinearLayout>商家的布局/
gwc_yuan_listoriginalgwcz
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="80dp"> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/gwc_yuan_check" android:layout_centerVertical="true" /> <com.facebook.drawee.view.SimpleDraweeView android:layout_width="80dp" android:layout_height="80dp" android:id="@+id/gwc_yuan_simple" android:layout_toRightOf="@+id/gwc_yuan_check" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="111" android:id="@+id/gwc_yuan_title" android:layout_toRightOf="@+id/gwc_yuan_simple" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_toRightOf="@+id/gwc_yuan_simple" android:layout_below="@+id/gwc_yuan_title" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="¥" android:textColor="#FF0000" android:layout_gravity="center_vertical" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/gwc_yuan_price" android:textColor="#FF0000" android:text="565" android:layout_marginLeft="10dp" android:layout_gravity="center_vertical" /> <com.example.mygwc.zdyview.Jiajianoriginalgwcz android:layout_width="90dp" android:layout_height="wrap_content" android:id="@+id/gwc_yuan_jiajian" android:layout_marginLeft="20dp" android:layout_gravity="center_vertical" android:gravity="center" ></com.example.mygwc.zdyview.Jiajianoriginalgwcz> <ImageView android:layout_width="50dp" android:layout_height="50dp" android:src="@drawable/delete" android:layout_marginLeft="70dp" android:layout_gravity="center_vertical" android:id="@+id/gwc_yuan_delete" /> </LinearLayout> </RelativeLayout>加减的布局
jiajianitemoriginalgwcz
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="80dp"> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/gwc_yuan_check" android:layout_centerVertical="true" /> <com.facebook.drawee.view.SimpleDraweeView android:layout_width="80dp" android:layout_height="80dp" android:id="@+id/gwc_yuan_simple" android:layout_toRightOf="@+id/gwc_yuan_check" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="111" android:id="@+id/gwc_yuan_title" android:layout_toRightOf="@+id/gwc_yuan_simple" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_toRightOf="@+id/gwc_yuan_simple" android:layout_below="@+id/gwc_yuan_title" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="¥" android:textColor="#FF0000" android:layout_gravity="center_vertical" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/gwc_yuan_price" android:textColor="#FF0000" android:text="565" android:layout_marginLeft="10dp" android:layout_gravity="center_vertical" /> <com.example.mygwc.zdyview.Jiajianoriginalgwcz android:layout_width="90dp" android:layout_height="wrap_content" android:id="@+id/gwc_yuan_jiajian" android:layout_marginLeft="20dp" android:layout_gravity="center_vertical" android:gravity="center" ></com.example.mygwc.zdyview.Jiajianoriginalgwcz> <ImageView android:layout_width="50dp" android:layout_height="50dp" android:src="@drawable/delete" android:layout_marginLeft="70dp" android:layout_gravity="center_vertical" android:id="@+id/gwc_yuan_delete" /> </LinearLayout> </RelativeLayout>