二级购物车代码

来源:互联网 发布:淘宝买岛国资源搜什么 编辑:程序博客网 时间:2024/05/20 15:39
//////////////////////////////////父布局需要的属性
package com.example.gshopping.bean;//一级的商家和选框public class GroupBean {    private String sellerName;///    private boolean gropuCb;    public GroupBean(String sellerName, boolean gropuCb) {        this.sellerName = sellerName;        this.gropuCb = gropuCb;    }    public String getSellerName() {        return sellerName;    }    public void setSellerName(String sellerName) {        this.sellerName = sellerName;    }    public boolean isGropuCb() {        return gropuCb;    }    public void setGropuCb(boolean gropuCb) {        this.gropuCb = gropuCb;    }}
////////////////////////////////////////子布局需要的属性
package com.example.gshopping.bean;public class ChildBean {    private String title;    private String images;    private double price;    private int num;    private boolean childCb;    private boolean btn;    public ChildBean(String title, String images, double price, int num, boolean childCb, boolean btn) {        this.title = title;        this.images = images;        this.price = price;        this.num = num;        this.childCb = childCb;        this.btn = btn;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    public String getImages() {        return images;    }    public void setImages(String images) {        this.images = images;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }    public int getNum() {        return num;    }    public void setNum(int num) {        this.num = num;    }    public boolean isChildCb() {        return childCb;    }    public void setChildCb(boolean childCb) {        this.childCb = childCb;    }    public boolean isBtn() {        return btn;    }    public void setBtn(boolean btn) {        this.btn = btn;    }}

//////////////////////////////////////////工具类M层请求网络的代码
package com.example.gshopping.httputils;import android.os.Handler;import com.example.gshopping.interfaces.CallBack;import com.google.gson.Gson;import java.io.IOException;import java.util.Map;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;public class HttpUtils {     private static volatile HttpUtils instance;         private static Handler handler = new Handler();         private HttpUtils(){         }         public static HttpUtils getInstance() {             if (instance == null) {                 synchronized (HttpUtils.class) {                     if (instance == null) {                         instance = new HttpUtils();                     }                 }             }             return instance;         }         //get请求         public void get(String url, Map<String,String> map, final CallBack callBack, final Class c,final String tag){             //对url和参数做拼接处理             StringBuffer stringBuffer = new StringBuffer();             stringBuffer.append(url);             //判断是否存在?   if中是存在             if(stringBuffer.indexOf("?")!=-1 ){                 //判断?是否在最后一位    if中是不在最后一位                 if(stringBuffer.indexOf("?")!=stringBuffer.length()-1){                     stringBuffer.append("&");                 }             }else{                 stringBuffer.append("?");             }             for(Map.Entry<String,String> entry:map.entrySet()){                 stringBuffer.append(entry.getKey())                         .append("=")                         .append(entry.getValue())                         .append("&");             }             //判断是否存在&   if中是存在             if(stringBuffer.indexOf("&")!=-1){                 stringBuffer.deleteCharAt(stringBuffer.lastIndexOf("&"));             }             //1:创建OkHttpClient对象             OkHttpClient okHttpClient = new OkHttpClient();             //2:创建Request对象             final Request request = new Request.Builder()                     .get()                     .url(stringBuffer.toString())                     .build();             //3:创建Call对象             Call call = okHttpClient.newCall(request);             //4:请求网络             call.enqueue(new Callback() {                 //请求失败                 @Override                 public void onFailure(Call call, final IOException e) {                     handler.post(new Runnable() {                         @Override                         public void run() {                             callBack.onFailed(e,tag);                         }                     });                 }                 //请求成功                 @Override                 public void onResponse(Call call, Response response) throws IOException {                     String result = response.body().string();                     //拿到数据解析                     final Object o = new Gson().fromJson(result, c);                     //当前是在子线程,回到主线程中                     handler.post(new Runnable() {                         @Override                         public void run() {                             //回调                             callBack.onSuccess(o,tag);                         }                     });                 }             });         }         //post请求         public void post(String url, Map<String,String> map, final CallBack callBack, final Class c,final String tag){             //1:创建OkHttpClient对象             OkHttpClient okHttpClient = new OkHttpClient();             //2:提供post请求需要的body对象             FormBody.Builder builder = new FormBody.Builder();             for(Map.Entry<String,String> entry:map.entrySet()){                 builder.add(entry.getKey(),entry.getValue());             }             FormBody body = builder.build();             //3:创建Request对象             final Request request = new Request.Builder()                     .post(body)                     .url(url)                     .build();             //4:创建Call对象             Call call = okHttpClient.newCall(request);             //5:请求网络             call.enqueue(new Callback() {                 //请求失败                 @Override                 public void onFailure(Call call, final IOException e) {                     handler.post(new Runnable() {                         @Override                         public void run() {                             callBack.onFailed(e,tag);                         }                     });                 }                 //请求成功                 @Override                 public void onResponse(Call call, Response response) throws IOException {                     String result = response.body().string();                     //拿到数据解析                     final Object o = new Gson().fromJson(result, c);                     //当前是在子线程,回到主线程中                     handler.post(new Runnable() {                         @Override                         public void run() {                             //回调                             callBack.onSuccess(o,tag);                         }                     });                 }             });         }}

///////////////////////////////////persenres层的代码
package com.example.gshopping.persener;import com.example.gshopping.httputils.HttpUtils;import com.example.gshopping.interfaces.CallBack;import com.example.gshopping.interfaces.Iview;import java.util.Map;public class Persener {    private Iview inv;    public void attach(Iview inv){       this.inv=inv;    }    public void get(String url, Map<String,String>map,Class cls, String tag){        HttpUtils.getInstance().get(url, map, new CallBack() {            @Override            public void onSuccess(Object o, String tag) {                 if (o!=null){                     inv.onSuccess(o,tag);                 }            }            @Override            public void onFailed(Exception e, String tag) {                inv.onSuccess(e,tag);            }        },cls,tag);    }    //内存    public void deleteView(){        if(inv!=null){            inv=null;        }    }}

///////////////////////////////////CallBack接口的代码
public interface CallBack {    void onSuccess(Object o,String tag);    void onFailed(Exception e,String tag);}

///////////////////////////////////View接口的代码
public interface Iview {    void onSuccess(Object o,String tag);    void onFailed(Exception e,String tag);}

//////////////////////////////////算钱时的接口代码
public interface MoneyView {    void isCheck(List<List<ChildBean>> list);}

///////////////////////////////////MainActivity的代码
package com.example.gshopping;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.CheckBox;import android.widget.ExpandableListView;import android.widget.TextView;import com.example.gshopping.adapter.ExpandableAdapter;import com.example.gshopping.bean.ChildBean;import com.example.gshopping.bean.GroupBean;import com.example.gshopping.bean.Zbean;import com.example.gshopping.interfaces.Iview;import com.example.gshopping.persener.Persener;import java.util.ArrayList;import java.util.HashMap;import java.util.List;public class MainActivity extends AppCompatActivity implements Iview,MoneyView{    private Persener persener;    List<GroupBean> groupBeen=new ArrayList<>();    List<List<ChildBean>> childBeen=new ArrayList<>();    private ExpandableListView elv;    private CheckBox all_chekbox;    private TextView total_price;    private TextView totalnumber;    private ExpandableAdapter expandableAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取控件        elv =(ExpandableListView)findViewById(R.id.elv);        all_chekbox =(CheckBox)findViewById(R.id.all_chekbox);        total_price =(TextView)findViewById(R.id.total_price);//价钱        totalnumber = (TextView)findViewById(R.id.total_number);//底部数量        //全选的点击事件        all_chekbox.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //初始值                double money = 0;                //判断全选的check是否为选择状态                if(all_chekbox.isChecked()){                    //更改父子check状态                    for (int i=0;i<groupBeen.size();i++){                        groupBeen.get(i).setGropuCb(true);                        List<ChildBean> childBeen = MainActivity.this.childBeen.get(i);                        for(int x=0;x<childBeen.size();x++){                            childBeen.get(x).setChildCb(true);                            //计算全选的价格                            int num = childBeen.get(x).getNum();                            double price = childBeen.get(x).getPrice();                            money=money+num*price;                        }                    }                    //设置底部的价格money的显示                    total_price.setText(money+"");                }else{                    for (int i=0;i<groupBeen.size();i++){                        groupBeen.get(i).setGropuCb(false);                        List<ChildBean> childBeen = MainActivity.this.childBeen.get(i);                        for(int x=0;x<childBeen.size();x++){                            childBeen.get(x).setChildCb(false);                        }                    }                    total_price.setText(0+"");                }                expandableAdapter.notifyDataSetChanged();            }        });        //将P层对象创建出来        persener = new Persener();        persener.attach(this);        HashMap<String, String> map = new HashMap<>();        persener.get(" http://120.27.23.105/product/getCarts?uid=100",map,Zbean.class,"car");    }    //传过来数据之后进行获取并向集合添加    @Override    public void onSuccess(Object o, String tag) {         if (o!=null&&tag.equals("car")){             Zbean bean=(Zbean)o;             List<Zbean.DataBean> data = bean.getData();             for(Zbean.DataBean i:data){                 GroupBean groupBean = new GroupBean(i.getSellerName(), false);                 this.groupBeen.add(groupBean);                 //二级                 List<Zbean.DataBean.ListBean> list = i.getList();                 List<ChildBean> ls=new ArrayList<>();                 for(Zbean.DataBean.ListBean w:list){                     String[] split = w.getImages().toString().split("\\|");                     ChildBean childBean = new ChildBean(w.getTitle(), split[0], w.getPrice(), 1, false, false);                     ls.add(childBean);                 }                  this.childBeen.add(ls);             }             expandableAdapter = new ExpandableAdapter(MainActivity.this, groupBeen, childBeen,this);             elv.setAdapter(expandableAdapter);         }    }    @Override    public void onFailed(Exception e, String tag) {    }    //算钱的接口    @Override    public void isCheck(List<List<ChildBean>> list) {        double money=0;        for (int i=0;i<childBeen.size();i++){            List<ChildBean> childBeen = MainActivity.this.childBeen.get(i);            for(int x=0;x<childBeen.size();x++){                //计算全选的价格                if(childBeen.get(x).isChildCb()){                    int num = childBeen.get(x).getNum();                    double price = childBeen.get(x).getPrice();                    money=money+num*price;                }            }        }        //设置底部的价格money的显示        total_price.setText(money+"");    }}

///////////////////////////////////////二级适配器的代码
package com.example.gshopping.adapter;import android.content.Context;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.BaseExpandableListAdapter;import android.widget.CheckBox;import android.widget.ImageView;import android.widget.TextView;import com.bumptech.glide.Glide;import com.example.gshopping.AddDeleteView;import com.example.gshopping.MainActivity;import com.example.gshopping.MoneyView;import com.example.gshopping.R;import com.example.gshopping.bean.ChildBean;import com.example.gshopping.bean.GroupBean;import java.util.ArrayList;import java.util.List;/** * Created by on 2017/11/20. */public class ExpandableAdapter extends BaseExpandableListAdapter {    private Context context;    private List<GroupBean> groupBeen;    private  List<List<ChildBean>> childBeen;    private TextView shop_title;    private ImageView shop_img;    private TextView shop_price;    //实现该接口    private MoneyView moneyview;    public ExpandableAdapter(Context context, List<GroupBean> groupBeen, List<List<ChildBean>> childBeen,MoneyView moneyview) {        this.context = context;        this.groupBeen = groupBeen;        this.childBeen = childBeen;        this.moneyview = moneyview;    }    @Override    public int getGroupCount() {        return groupBeen.size();    }    @Override    public int getChildrenCount(int groupPosition) {        return childBeen.get(groupPosition).size();    }    @Override    public Object getGroup(int groupPosition) {        return groupBeen.get(groupPosition).getSellerName();    }    @Override    public Object getChild(int groupPosition, int childPosition) {        return childBeen.get(groupPosition).get(childPosition).getTitle();    }    @Override    public long getGroupId(int groupPosition) {        return groupPosition;    }    @Override    public long getChildId(int groupPosition, int childPosition) {        return childPosition;    }    @Override    public boolean hasStableIds() {        return false;    }    @Override    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {        View view = View.inflate(context, R.layout.grouplist, null);        final CheckBox groupCb =(CheckBox)view.findViewById(R.id.group_checkbox);        TextView shopName = (TextView) view.findViewById(R.id.shop_name);        shopName.setText(groupBeen.get(groupPosition).getSellerName());        groupCb.setChecked(groupBeen.get(groupPosition).isGropuCb());        //一级的复选框        groupCb.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //checked 一级的check                if(groupCb.isChecked()==true){                    //遍历子集合 让子集合中的Boolean值改为true                    List<ChildBean> childBeen1 = childBeen.get(groupPosition);                    for(int x=0;x<childBeen1.size();x++){                        childBeen1.get(x).setChildCb(true);                    }                    //改父级别的check的值                    groupBeen.get(groupPosition).setGropuCb(true);                    //刷新  重新加载                    notifyDataSetChanged();                    moneyview.isCheck(childBeen);                }else{                    List<ChildBean> childBeen1 = childBeen.get(groupPosition);                    for(int x=0;x<childBeen1.size();x++){                        childBeen1.get(x).setChildCb(false);                    }                    groupBeen.get(groupPosition).setGropuCb(false);                    notifyDataSetChanged();                }                //3全选设置                //得到Activity的全选按钮                MainActivity tag= (MainActivity) context;                CheckBox checkAll= (CheckBox) tag.findViewById(R.id.all_chekbox);               //设置一个初始的boolean值 用来判断                Boolean A=true;                //遍历父集合                for(int i=0;i<groupBeen.size();i++){                    boolean gropuCb = groupBeen.get(i).isGropuCb();                    if(gropuCb!=true){                        A=false;                        break;                    }                }                //设置全选按钮                checkAll.setChecked(A);                moneyview.isCheck(childBeen);            }        });        return view;    }    @Override    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {        View view = View.inflate(context, R.layout.childlist, null);        final CheckBox childCheck= (CheckBox) view.findViewById(R.id.child_checkbox);        shop_title =(TextView)view.findViewById(R.id.shop_title);        shop_img =(ImageView)view.findViewById(R.id.shop_img);        shop_price =(TextView)view.findViewById(R.id.shop_price);        //找到自定义的View主键        final AddDeleteView adv= (AddDeleteView) view.findViewById(R.id.adddeleteview);        adv.setNumber(childBeen.get(groupPosition).get(childPosition).getNum());        adv.setOnAddDelClickListener(new AddDeleteView.OnAddDelClickListener() {            @Override            public void onAddClick(View v) {                int origin=adv.getNumber();                origin++;                adv.setNumber(origin);                //设置子check为true                childBeen.get(groupPosition).get(childPosition).setChildCb(true);                childBeen.get(groupPosition).get(childPosition).setNum(origin);                Log.e("TAG",origin+"");                notifyDataSetChanged();                moneyview.isCheck(childBeen);            }            @Override            public void onDelClick(View v) {                int origin=adv.getNumber();                origin--;                adv.setNumber(origin);                //设置子check为true                childBeen.get(groupPosition).get(childPosition).setChildCb(true);                childBeen.get(groupPosition).get(childPosition).setNum(origin);                notifyDataSetChanged();                moneyview.isCheck(childBeen);            }        });        shop_title.setText(childBeen.get(groupPosition).get(childPosition).getTitle());        String images = childBeen.get(groupPosition).get(childPosition).getImages();        Glide.with(context).load(images).into(shop_img);        shop_price.setText(childBeen.get(groupPosition).get(childPosition).getPrice()+"");        childCheck.setChecked(childBeen.get(groupPosition).get(childPosition).isChildCb());        //子级别的点击事件都点完之后  父级别根着动        childCheck.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //得到子类里状态值                boolean childCb = childBeen.get(groupPosition).get(childPosition).isChildCb();                if(childCb){                    childBeen.get(groupPosition).get(childPosition).setChildCb(false);                }else{                    childBeen.get(groupPosition).get(childPosition).setChildCb(true);                }                //写一个变量值用来判断                Boolean A=true;                //遍历子集合                List<ChildBean> childBeen1 = childBeen.get(groupPosition);                for (int i=0;i<childBeen1.size();i++){                    //判断子级别中有没有false                    if(childBeen1.get(i).isChildCb()==false){                        A=false;                    }                }                //如果为true 子级别全选                if(A){                    //设置父级别的选择框                    groupBeen.get(groupPosition).setGropuCb(true);                }else{                    groupBeen.get(groupPosition).setGropuCb(false);                }                notifyDataSetChanged();                //子级别的全选按钮的判断设置                MainActivity tag= (MainActivity) context;                CheckBox checkAll= (CheckBox) tag.findViewById(R.id.all_chekbox);                //设置一个初始的boolean值 用来判断                Boolean B=true;                //遍历父集合                for(int x=0;x<childBeen.size();x++){                    List<ChildBean> childBeen = ExpandableAdapter.this.childBeen.get(x);                    for(int j=0;j<childBeen.size();j++){                        boolean childCb1 = childBeen.get(j).isChildCb();                        if(childCb1!=true){                            B=false;                            break;                        }                    }                }                //设置全选按钮                checkAll.setChecked(B);                moneyview.isCheck(childBeen);            }        });        return view;    }    @Override    public boolean isChildSelectable(int groupPosition, int childPosition) {        return false;    }}

////////////////////////////////////////自定义View的代码
package com.example.gshopping;import android.content.Context;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.View;import android.widget.LinearLayout;import android.widget.TextView;/** * Created by on 2017/11/21. * 自定义View的加减号 */public class AddDeleteView extends LinearLayout {    //设置接口回调    private OnAddDelClickListener Listener;    private TextView etNumber;    public interface OnAddDelClickListener{        void onAddClick(View v);        void onDelClick(View v);    }    //接口对象    public void setOnAddDelClickListener(OnAddDelClickListener Listener){        if (Listener!=null){            this.Listener=Listener;        }    }    public AddDeleteView(Context context) {        this(context,null);    }    public AddDeleteView(Context context, @Nullable AttributeSet attrs) {        this(context, attrs,0);    }    public AddDeleteView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        //加载布局        View view = View.inflate(context, R.layout.zidingyiview, this);        //获得主键        TextView txtDelete = (TextView) findViewById(R.id.txt_delete);        TextView txtAdd = (TextView) findViewById(R.id.txt_add);        etNumber = (TextView) findViewById(R.id.et_number);        //点击事件        txtAdd.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Listener.onAddClick(AddDeleteView.this);            }        });        txtDelete.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Listener.onDelClick(AddDeleteView.this);            }        });    }    //对外提供设置EditText值得方法    public void setNumber(int number){        if (number>0){            etNumber.setText(number+"");        }    }    public int getNumber(){        int number=0;        try {            String trim = etNumber.getText().toString().trim();            number = Integer.valueOf(trim);        }catch (Exception e){            number=0;        }        return number;    }}

//默认展开for (int i = 0; i< expandableAdapter.getGroupCount(); i++){    exlv.expandGroup(i);}

原创粉丝点击