//首先你需要分包明确
//先创建一个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初始化一下Fresco
import 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);
}*/
}
//来,再来创建一个接口ServerApi
import 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在这个包里面有一个接口IMainActivity
import 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'
实现京东购物车
最新推荐文章于 2024-05-18 20:31:13 发布