实现京东购物车

来源:互联网 发布: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'

原创粉丝点击