实现京东购物车
来源:互联网 发布:linux 搜狗输入法 双拼 编辑:程序博客网 时间:2024/05/01 20:22
//首先你需要分包明确//先创建一个adapter的包//在adapter的包中创建一个类//好了不绕圈子啦给你们把代码放上来吧import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseExpandableListAdapter;import android.widget.CheckBox;import android.widget.TextView;import android.widget.Toast;import com.facebook.drawee.view.SimpleDraweeView;import org.greenrobot.eventbus.EventBus;import java.util.List;import baway.com.gouwuche.R;import baway.com.gouwuche.bean.EventBean;import baway.com.gouwuche.bean.EventBusBool;import baway.com.gouwuche.bean.ShopCarBean;import baway.com.gouwuche.net.MyView;import baway.com.gouwuche.presenter.MainPresenter;import baway.com.gouwuche.view.IView.IMainActivity;/** * Created by Administrator on 2017/12/19. */public class MyExAdapter extends BaseExpandableListAdapter { Context context; List<ShopCarBean.DataBean> list; int isxian=View.INVISIBLE; MainPresenter presenter; public MyExAdapter(Context context, List<ShopCarBean.DataBean> list, IMainActivity iMainActivity) { this.context = context; this.list = list; presenter=new MainPresenter(iMainActivity); } @Override public int getGroupCount() { return list.size(); } @Override public int getChildrenCount(int i) { return list.get(i).getList().size(); } @Override public Object getGroup(int i) { return list.get(i); } @Override public Object getChild(int i, int i1) { return list.get(i).getList().get(i1); } @Override public long getGroupId(int i) { return i; } @Override public long getChildId(int i, int i1) { return i1; } @Override public boolean hasStableIds() { return false; } class MyGroupHolder { TextView name; CheckBox checkBox; TextView bianji; } @Override public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) { MyGroupHolder holder; if (view == null) { //加载布局 view = View.inflate(context, R.layout.item_group, null); holder = new MyGroupHolder(); holder.name = view.findViewById(R.id.group_name); holder.checkBox = view.findViewById(R.id.group_check); holder.bianji=view.findViewById(R.id.bianji); view.setTag(holder); } { holder = (MyGroupHolder) view.getTag(); } //父数据 final ShopCarBean.DataBean dataBean = list.get(i); holder.name.setText(dataBean.getSellerName()); holder.checkBox.setChecked(dataBean.isGroupCheck()); final MyGroupHolder finalHolder = holder; holder.checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { EventBusBool eventBusBool=new EventBusBool(); if(finalHolder.checkBox.isChecked()) { dataBean.setGroupCheck(true); isChild(i,true); if(isGroupAll()) { eventBusBool.setB(true); } } else { dataBean.setGroupCheck(false); isChild(i,false); eventBusBool.setB(false); } isAllPrice(); EventBus.getDefault().post(eventBusBool); notifyDataSetChanged();//刷新适配器 } }); //编辑 holder.bianji.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(isxian==View.INVISIBLE) { isxian=View.VISIBLE; } else { isxian=View.INVISIBLE; } notifyDataSetChanged(); } }); return view; } public class MyChildHolder { CheckBox checkBox; SimpleDraweeView simpleDraweeView; TextView name; TextView time; TextView price; MyView myView; TextView del; } @Override public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) { MyChildHolder holder; if (view == null) { view = View.inflate(context, R.layout.item_child, null); holder = new MyChildHolder(); holder.checkBox = view.findViewById(R.id.child_check); holder.name = view.findViewById(R.id.child_name); holder.price = view.findViewById(R.id.child_price); holder.time = view.findViewById(R.id.child_time); holder.simpleDraweeView = view.findViewById(R.id.simple); holder.del=view.findViewById(R.id.del); holder.myView=view.findViewById(R.id.myview); view.setTag(holder); } { holder = (MyChildHolder) view.getTag(); } final ShopCarBean.DataBean.ListBean listBean = list.get(i).getList().get(i1); String str[] = listBean.getImages().split("\\|"); holder.simpleDraweeView.setImageURI(str[0]); holder.time.setText(listBean.getCreatetime()); holder.price.setText("¥" + listBean.getPrice()); holder.name.setText(listBean.getSubhead().substring(0, 10)); holder.checkBox.setChecked(listBean.isChildCheck()); holder.del.setVisibility(isxian); holder.myView.setNum(listBean.getNum()+""); //点击事件 final MyChildHolder finalHolder = holder; holder.checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { EventBusBool eventBusBool=new EventBusBool(); if(finalHolder.checkBox.isChecked()) { listBean.setChildCheck(true); if(isChildGroup(i))//判断二级是否全选 { list.get(i).setGroupCheck(true); if(isGroupAll()) { eventBusBool.setB(true); } } } else { listBean.setChildCheck(false); list.get(i).setGroupCheck(false); eventBusBool.setB(false); } EventBus.getDefault().post(eventBusBool); isAllPrice(); notifyDataSetChanged();//刷新适配器 } }); //删除 holder.del.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { /* list.get(i).getList().remove(i1);*/ presenter.postDelCar("1753",listBean.getPid()+""); //notifyDataSetChanged(); } }); holder.myView.setAdditemClick(new View.OnClickListener() { @Override public void onClick(View view) { int num=listBean.getNum(); num++; listBean.setNum(num); isAllPrice(); finalHolder.myView.setNum(num+""); } }); holder.myView.setJianitemClick(new View.OnClickListener() { @Override public void onClick(View view) { int num=listBean.getNum(); if(num==1) { Toast.makeText(context,"最小为1",Toast.LENGTH_SHORT).show(); return; } num--; listBean.setNum(num); isAllPrice(); finalHolder.myView.setNum(num+""); } }); return view; } @Override public boolean isChildSelectable(int i, int i1) { return false; } //二级和一级联动 public boolean isChildGroup(int position) { for(int i=0;i<list.get(position).getList().size();i++) { if(!list.get(position).getList().get(i).isChildCheck()) { return false; } } return true; } //二级和全选 public boolean isGroupAll() { for(int i=0;i<list.size();i++) { if(!list.get(i).isGroupCheck()) { return false; } } return true; } //一级与二级 public void isChild(int position,boolean b) { List<ShopCarBean.DataBean.ListBean> listBeans=list.get(position).getList(); for(int i=0;i<listBeans.size();i++) { listBeans.get(i).setChildCheck(b); } } //计算价格的方法 public void isAllPrice() { int num = 0; int price = 0; for(int i=0;i<list.size();i++) { List<ShopCarBean.DataBean.ListBean> listBeans=list.get(i).getList(); for(int j=0;j<listBeans.size();j++) { if(listBeans.get(j).isChildCheck()) { num+=listBeans.get(j).getNum(); price+=listBeans.get(j).getNum()*listBeans.get(j).getPrice(); } } } EventBean eventBean=new EventBean(); eventBean.setNum(num+""); eventBean.setPrice(price+""); EventBus.getDefault().post(eventBean); }}//然后创建一个bean的包//在这个包里有4个具体的bean的类//第一个类public class EventBean { private String price; private String num; public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public String getNum() { return num; } public void setNum(String num) { this.num = num; }}//好了然后来创建第二个bean类吧 //接下来是第二个public class EventBusBool { boolean b; public boolean isB() { return b; } public void setB(boolean b) { this.b = b; }}//第三个bean类public class MsgBean { /** * 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; }}//别着急,接下来就是最后一个bean类啦//第四个bean类public class ShopCarBean { /** * msg : 请求成功 * code : 0 * data : [{"list":[{"bargainPrice":22.9,"createtime":"2017-10-14T21:48:08","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":1,"pid":24,"price":288,"pscid":2,"selected":1,"sellerid":1,"subhead":"三只松鼠零食特惠,专区满99减50,满199减100,火速抢购》","title":"三只松鼠 坚果炒货 零食奶油味 碧根果225g/袋"},{"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":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":2,"pid":47,"price":111,"pscid":39,"selected":0,"sellerid":3,"subhead":"碳黑色 32GB 全网通 官方标配 1件","title":"锤子 坚果Pro 特别版 巧克力色 酒红色 全网通 移动联通电信4G手机 双卡双待 碳黑色 32GB 全网通"},{"bargainPrice":5599,"createtime":"2017-10-10T17:30:32","detailUrl":"https://item.m.jd.com/product/4824715.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n12/jfs/t7768/184/1153704394/148460/f42e1432/599a930fN8a85626b.jpg!q70.jpg","num":1,"pid":59,"price":5599,"pscid":40,"selected":0,"sellerid":3,"subhead":"游戏本选择4G独显,拒绝掉帧】升级版IPS全高清防眩光显示屏,WASD方向键颜色加持,三大出风口立体散热!","title":"戴尔DELL灵越游匣15PR-6648B GTX1050 15.6英寸游戏笔记本电脑(i5-7300HQ 8G 128GSSD+1T 4G独显 IPS)黑"}],"sellerName":"商家3","sellerid":"3"},{"list":[{"bargainPrice":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":1,"pid":48,"price":222,"pscid":39,"selected":0,"sellerid":4,"subhead":"【现货新品抢购】全面屏2.0震撼来袭,骁龙835处理器,四曲面陶瓷机","title":"小米(MI) 小米MIX2 手机 黑色 全网通 (6GB+64GB)【标配版】"},{"bargainPrice":11800,"createtime":"2017-10-14T21:48:08","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","num":1,"pid":60,"price":13888,"pscid":40,"selected":0,"sellerid":4,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"}],"sellerName":"商家4","sellerid":"4"},{"list":[{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","num":1,"pid":63,"price":10000,"pscid":40,"selected":0,"sellerid":7,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"}],"sellerName":"商家7","sellerid":"7"}] */ 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":22.9,"createtime":"2017-10-14T21:48:08","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":1,"pid":24,"price":288,"pscid":2,"selected":1,"sellerid":1,"subhead":"三只松鼠零食特惠,专区满99减50,满199减100,火速抢购》","title":"三只松鼠 坚果炒货 零食奶油味 碧根果225g/袋"},{"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 isGroupCheck; public boolean isGroupCheck() { return isGroupCheck; } public void setGroupCheck(boolean groupCheck) { isGroupCheck = groupCheck; } 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 : 22.9 * createtime : 2017-10-14T21:48:08 * 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 : 1 * pid : 24 * price : 288.0 * pscid : 2 * selected : 1 * sellerid : 1 * subhead : 三只松鼠零食特惠,专区满99减50,满199减100,火速抢购》 * title : 三只松鼠 坚果炒货 零食奶油味 碧根果225g/袋 */ private double bargainPrice; private String createtime; private String detailUrl; private String images; private int num; private int pid; private double price; private int pscid; private int selected; private int sellerid; private String subhead; private String title; private boolean isChildCheck; public boolean isChildCheck() { return isChildCheck; } public void setChildCheck(boolean childCheck) { isChildCheck = childCheck; } 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; } } }}//好了把这些bean类创建好了以后//因为使用的是MVP框架所以现在就来写一下model的包吧//在这个包里有一个类(类名MainModle),还有一个包里面放了一个接口这个包名是IModle//先放一下包里接口的东西吧import java.util.HashMap;import baway.com.gouwuche.bean.MsgBean;import baway.com.gouwuche.bean.ShopCarBean;import baway.com.gouwuche.net.NetWorkListener;/** * Created by Administrator on 2017/12/19. */public interface IMainModle { //展示购物车数据 public void postCar(String uid, NetWorkListener<ShopCarBean> netWorkListener); //删除购物车 public void postDelCar(HashMap<String, String> hashMap, NetWorkListener<MsgBean> netWorkListener); //更新购物车 public void postUpdaterCar(HashMap<String, String> hashMap, NetWorkListener<MsgBean> netWorkListener);}//再放一下model里的MainModle类吧import java.util.HashMap;import baway.com.gouwuche.bean.MsgBean;import baway.com.gouwuche.bean.ShopCarBean;import baway.com.gouwuche.model.IModle.IMainModle;import baway.com.gouwuche.net.NetWorkListener;import baway.com.gouwuche.utils.RetrofitHelper;import baway.com.gouwuche.utils.ServerApi;import rx.Observer;import rx.android.schedulers.AndroidSchedulers;import rx.schedulers.Schedulers;/** * Created by Administrator on 2017/12/19. */public class MainModle implements IMainModle { //展示购物车数据 @Override public void postCar(String uid, final NetWorkListener<ShopCarBean> netWorkListener) { ServerApi serverApi= RetrofitHelper.getServerApi(); serverApi.shopCall(uid) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<ShopCarBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { netWorkListener.onError((Exception) e); } @Override public void onNext(ShopCarBean shopCarBean) { netWorkListener.onSuccess(shopCarBean); } }); } //删除购物车 @Override public void postDelCar(HashMap<String, String> hashMap, final NetWorkListener<MsgBean> netWorkListener) { ServerApi serverApi=RetrofitHelper.getServerApi(); serverApi.msgCall(hashMap) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<MsgBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { netWorkListener.onError((Exception) e); } @Override public void onNext(MsgBean msgBean) { netWorkListener.onSuccess(msgBean); } }); } //更新购物车数据 @Override public void postUpdaterCar(HashMap<String, String> hashMap, final NetWorkListener<MsgBean> netWorkListener) { ServerApi serverApi=RetrofitHelper.getServerApi(); serverApi.msgCall(hashMap) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<MsgBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { netWorkListener.onError((Exception) e); } @Override public void onNext(MsgBean msgBean) { netWorkListener.onSuccess(msgBean); } }); }}//好了我们的model就做这么多工作//接下来来看一下我们的网络包net里面都做了什么吧//创建一个net包//首先里面创建了一个Api的接口来存放要请求的接口public interface Api { public String HOST="http://120.27.23.105/"; public String SHOPCAR="product/getCarts?source=android";//查询购物车 public String DELETECAR="product/deleteCart";//删除购物车 public String UPDATECAR="product/updateCarts";//更新购物车}//然后来创建一个App因为在做图片展示的时候要用到Fresco所以要创建一个App初始化一下Frescoimport android.app.Application;import com.facebook.drawee.backends.pipeline.Fresco;/** * Created by Administrator on 2017/12/19. */public class App extends Application{ @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); }}//完事,这个时候千万不要忘记去清单文件里注册一下App呦不然会报错滴//在net包里还有什么东东嘞,来,再创建一个MyView类吧//这个类里面放的是这些东西import android.content.Context;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.View;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import baway.com.gouwuche.R;/** * Created by Administrator on 2017/12/19. */public class MyView extends LinearLayout { ImageView jia; TextView num; ImageView jian; public MyView(Context context) { super(context); } public MyView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); View view=View.inflate(context, R.layout.item_view,this); jia=view.findViewById(R.id.jia); num=view.findViewById(R.id.num); jian=view.findViewById(R.id.jian); } public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } /** * ++ * @param onClickListener */ public void setAdditemClick(OnClickListener onClickListener) { jia.setOnClickListener(onClickListener); } /** * -- */ public void setJianitemClick(OnClickListener onClickListener) { jian.setOnClickListener(onClickListener); } //赋值 public void setNum(String num1) { num.setText(num1+""); }}//不要说话趁热打铁的来再创建一个NetWorkListener接口public interface NetWorkListener<T>{ public void onError(Exception e); public void onSuccess(T t);}//以上就是net包的所有操作啦//现在来看一看我们伟大的Presenter包做了什么工作//千万不要忘记创建一个presenter包呦哈哈哈import java.util.HashMap;import baway.com.gouwuche.bean.MsgBean;import baway.com.gouwuche.bean.ShopCarBean;import baway.com.gouwuche.model.IModle.IMainModle;import baway.com.gouwuche.model.MainModle;import baway.com.gouwuche.net.NetWorkListener;import baway.com.gouwuche.view.IView.IMainActivity;/** * Created by Administrator on 2017/12/19. */public class MainPresenter { IMainActivity iMainActivity; IMainModle iMainModle; public MainPresenter(IMainActivity iMainActivity) { this.iMainActivity = iMainActivity; iMainModle=new MainModle(); } //购物车数据 public void postShopCar() { iMainModle.postCar("1753", new NetWorkListener<ShopCarBean>() { @Override public void onError(Exception e) { } @Override public void onSuccess(ShopCarBean shopCarBean) { iMainActivity.showShopCar(shopCarBean); } }); } //删除购物车 public void postDelCar(String uid,String pid) { HashMap<String,String> hashMap=new HashMap<>(); hashMap.put("uid",uid); hashMap.put("pid",pid); iMainModle.postDelCar(hashMap, new NetWorkListener<MsgBean>() { @Override public void onError(Exception e) { } @Override public void onSuccess(MsgBean msgBean) { iMainActivity.showDelCar(msgBean); } }); } // public void doDview() { iMainActivity=null; }}//我们伟大的Presenter就光荣的完成任务啦//现在来看一下Utils包里放了什么//首先我们先创建了一个RetrofitHelper类import baway.com.gouwuche.net.Api;import okhttp3.OkHttpClient;import retrofit2.Retrofit;import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;import retrofit2.converter.gson.GsonConverterFactory;/** * Created by Administrator on 2017/12/19. */public class RetrofitHelper { public static OkHttpClient okHttpClient; public static ServerApi serverApi; static { initOkHttpClient(); } private static void initOkHttpClient() { if(okHttpClient==null) { synchronized (RetrofitHelper.class) { if(okHttpClient==null) { okHttpClient=new OkHttpClient(); } } } } //获取SverApi对象 public static ServerApi getServerApi() { if(serverApi==null) { synchronized (ServerApi.class) { if(serverApi==null) { serverApi=onCreatApi(ServerApi.class, Api.HOST); } } } return serverApi; } //初始化ServerApi public static<T> T onCreatApi(Class<T> tClass,String url) { Retrofit retrofit=new Retrofit.Builder() .baseUrl(url) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); return retrofit.create(tClass); } /* private<T> void toComurer(Observable<T> observable, Consumer<T> t,Consumer<Throwable> e) { observable.subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(t,e); }*/}//来,再来创建一个接口ServerApiimport java.util.HashMap;import baway.com.gouwuche.bean.MsgBean;import baway.com.gouwuche.bean.ShopCarBean;import baway.com.gouwuche.net.Api;import retrofit2.http.POST;import retrofit2.http.Query;import retrofit2.http.QueryMap;import rx.Observable;/** * Created by Administrator on 2017/12/19. */public interface ServerApi { //查询购物车 @POST(Api.SHOPCAR) Observable<ShopCarBean> shopCall(@Query("uid") String uid); //删除购物车 @POST(Api.DELETECAR) Observable<MsgBean> msgCall(@QueryMap HashMap<String, String> hashMap); //更新购物车 Observable<MsgBean> UpdaterCall(@QueryMap HashMap<String, String> hashMap);}//终于到view包了//view包里做了啥捏//view里面有一个包IView在这个包里面有一个接口IMainActivityimport baway.com.gouwuche.bean.MsgBean;import baway.com.gouwuche.bean.ShopCarBean;/** * Created by Administrator on 2017/12/19. */public interface IMainActivity { //展示购物车数据 public void showShopCar(ShopCarBean shopCarBean); //删除购物车数据 public void showDelCar(MsgBean msgBean);}//view里面还有一个MainActivity这个我也放到view包啦//代码奉上import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.CheckBox;import android.widget.ExpandableListView;import android.widget.TextView;import android.widget.Toast;import org.greenrobot.eventbus.EventBus;import org.greenrobot.eventbus.Subscribe;import java.util.ArrayList;import java.util.List;import baway.com.gouwuche.R;import baway.com.gouwuche.adapter.MyExAdapter;import baway.com.gouwuche.bean.EventBean;import baway.com.gouwuche.bean.EventBusBool;import baway.com.gouwuche.bean.MsgBean;import baway.com.gouwuche.bean.ShopCarBean;import baway.com.gouwuche.presenter.MainPresenter;import baway.com.gouwuche.view.IView.IMainActivity;public class MainActivity extends AppCompatActivity implements IMainActivity { List<ShopCarBean.DataBean> groupList; private ExpandableListView mMexl; MyExAdapter adapter; MainPresenter presenter; private CheckBox mCheck; /** * 价格:0 */ private TextView mAllprice; /** * 结算 */ private TextView mJiesuan; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EventBus.getDefault().register(this); initView(); presenter = new MainPresenter(this); presenter.postShopCar(); } //购物车数据 @Override public void showShopCar(ShopCarBean shopCarBean) { groupList = new ArrayList<>(); groupList = shopCarBean.getData(); adapter = new MyExAdapter(MainActivity.this, groupList,this); mMexl.setAdapter(adapter); //默认展开 mMexl.setGroupIndicator(null); for (int i = 0; i < groupList.size(); i++) { mMexl.expandGroup(i); } mCheck.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(mCheck.isChecked()) { isAllPrice(true); } else { isAllPrice(false); } adapter.notifyDataSetChanged(); } }); } //删除购物车 @Override public void showDelCar(MsgBean msgBean) { Toast.makeText(MainActivity.this,msgBean.getMsg(),Toast.LENGTH_SHORT).show(); presenter.postShopCar(); } private void initView() { mMexl = (ExpandableListView) findViewById(R.id.mexl); mCheck = (CheckBox) findViewById(R.id.check); mAllprice = (TextView) findViewById(R.id.allprice); mJiesuan = (TextView) findViewById(R.id.jiesuan); } @Subscribe public void getCheck(EventBusBool eventBusBool) { mCheck.setChecked(eventBusBool.isB()); } @Subscribe public void getBean(EventBean eventBusBool) { mJiesuan.setText("结算:("+eventBusBool.getNum()+")"); mAllprice.setText("¥"+eventBusBool.getPrice()); } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); presenter.doDview();//解绑 } //计算价格的方法 public void isAllPrice(boolean b) { for(int i=0;i<groupList.size();i++) { groupList.get(i).setGroupCheck(b); List<ShopCarBean.DataBean.ListBean> listBeans=groupList.get(i).getList(); for(int j=0;j<listBeans.size();j++) { listBeans.get(j).setChildCheck(b); } } adapter.isAllPrice();//计算价格和数量 }}//下面是布局文件啦//activity_main的布局<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" ><ExpandableListView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:id="@+id/mexl"></ExpandableListView> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:layout_weight="9"> <CheckBox android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" android:id="@+id/check" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="全选"/> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center" android:layout_marginLeft="150dp" android:text="价格:0" android:id="@+id/allprice"/> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:background="@android:color/holo_orange_dark" android:text="结算" android:id="@+id/jiesuan"/> </LinearLayout></LinearLayout>//item_child的布局<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="horizontal"> <CheckBox android:layout_width="wrap_content" android:layout_height="match_parent" android:focusable="true" android:gravity="center_vertical" android:id="@+id/child_check"/><com.facebook.drawee.view.SimpleDraweeView android:layout_width="80dp" android:layout_height="80dp" android:id="@+id/simple" app:placeholderImage="@mipmap/ic_launcher"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/child_name"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/child_time"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/holo_red_dark" android:id="@+id/child_price"/> <baway.com.gouwuche.net.MyView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/myview"></baway.com.gouwuche.net.MyView> </LinearLayout> </LinearLayout> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="end" android:textColor="@android:color/holo_red_dark" android:text="删除" android:visibility="invisible" android:id="@+id/del"/></LinearLayout>//item_group的布局<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:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/group_check"/><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/group_name" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="编辑" android:id="@+id/bianji" android:textStyle="bold" android:textSize="16sp" android:gravity="end"/></LinearLayout>//item_view的布局<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <ImageView android:layout_width="30dp" android:layout_height="30dp" android:id="@+id/jia" android:src="@drawable/shopcart_add_red"/> <TextView android:layout_width="50dp" android:layout_height="match_parent" android:gravity="center" android:id="@+id/num" android:background="@drawable/shopcar_item"/> <ImageView android:layout_width="30dp" android:layout_height="30dp" android:id="@+id/jian" android:src="@drawable/shopcart_minus_red"/></LinearLayout>//还有drawable里面的资源也都给你们放出来啦//有一个这个shopcar_item.xml<shape xmlns:android="http://schemas.android.com/apk/res/android"><corners android:radius="200dp"></corners> <stroke android:color="@color/colorPrimaryDark" android:width="1dp"/></shape>//这个里面还有三张图片资源你们可以自己从网上找一下子就可以啦,这三张是+-号的图片//app里面的依赖compile 'org.greenrobot:eventbus:3.0.0'compile 'com.facebook.fresco:fresco:1.5.0'compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'compile 'com.trello:rxlifecycle:1.0'compile 'com.trello:rxlifecycle-components:1.0'compile 'com.squareup.retrofit2:retrofit:2.3.0'compile 'com.squareup.retrofit2:converter-gson:2.3.0'compile 'org.greenrobot:eventbus:3.1.1'compile 'com.jakewharton:butterknife:8.1.0'
阅读全文
0 0
- 实现京东购物车
- TableView 实现京东购物车功能
- 购物车实现(模仿京东)
- 京东购物车
- 实现京东底部添加到购物车的效果
- 基本实现京东购物车 mysql+php+html
- java-web京东购物网 加入购物车与查看购物车的实现运用session服务器端(在数据库中查询)
- 购物车的实现
- JSP 购物车实现
- profile实现购物车
- Ajax实现购物车
- HashTable实现购物车
- session实现购物车
- 购物车实现
- 购物车实现原理
- 实现购物车
- 购物车的实现
- 购物车的实现
- scau 9718 整数因子分解(优先做)
- 安卓系统版本号关系表
- 关于基于Web端的H5有什么优势?
- python中xpath常用方法 小结
- gcc升降级
- 实现京东购物车
- 第三周
- 购物车自定义view 加减号
- 《Neural Networks and Deep Learning》读书笔记:最简单的识别MNIST的神经网络程序(2)
- 二维码登录
- 支持通配符的括号匹配问题源码+详细流程代码(python)
- vector resize 和reserve区别
- Adobe的安装、激活与汉化
- Gradle仓库配置