二级购物车代码
来源:互联网 发布:淘宝买岛国资源搜什么 编辑:程序博客网 时间: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);}
阅读全文
0 0
- 二级购物车代码
- 二级购物车代码片
- 二级购物车代码逻辑分享
- 二级列表购物车
- 购物车二级列表
- 购物车二级
- 购物车(二级列表)
- 二级购物车
- 二级购物车
- 二级列表购物车
- 购物车二级列表
- 二级购物车ShoppingCart
- 二级购物车
- 二级购物车完整版
- 购物车二级列表
- 完整版二级购物车
- 二级列表购物车
- 二级列表购物车
- 使用VS2013进行C#程序的单元测试
- Android Studio 工程视图&项目构成
- 最近公司有项目要更,所以博客项目暂停更新了几周,现在继续
- Android用MVP实现的二级列表购物车
- MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)
- 二级购物车代码
- 图森未来C轮融资5500万美元,新浪继续跟投,无人卡车公开试乘
- Matlab高清图片输出
- 机器人正改变着全球工业,仅中国去年就买了9万台
- 老司机和驾驶辅助系统相处得如何?MIT研究人员做了个科学研究
- svn--1.概述
- 史上最壕无人车买家诞生!泥潭中的Uber要搞个超大的无人出租车队
- Oracle数据库迁移
- JDBC连接MySQL数据库