//付属
MyAdapter
package com.example.thinkpad.wsjykmn.app; 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.example.thinkpad.wsjykmn.R; import com.example.thinkpad.wsjykmn.model.bean.Guwbean; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; public class MyAdapter extends BaseExpandableListAdapter { private List<Guwbean.DataBean> sellerData; public MyAdapter(List<Guwbean.DataBean> sellerData) { this.sellerData = sellerData; } //商家集合的长度 @Override public int getGroupCount() { return sellerData == null ? 0 : sellerData.size(); } //商品集合的长度 @Override public int getChildrenCount(int groupPosition) { return sellerData.get(groupPosition).getList() == null ? 0 : sellerData.get(groupPosition).getList().size(); } @Override public Object getGroup(int groupPosition) { return null; } @Override public Object getChild(int groupPosition, int childPosition) { return null; } @Override public long getGroupId(int groupPosition) { return 0; } @Override public long getChildId(int groupPosition, int childPosition) { return 0; } @Override public boolean hasStableIds() { return false; } @Override public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { //获取数据 Guwbean.DataBean dataBean = sellerData.get(groupPosition); ParentViewHolder parentViewHolder; if (convertView == null) { convertView = View.inflate(parent.getContext(), R.layout.item_cart_parent, null); parentViewHolder = new ParentViewHolder(convertView); convertView.setTag(parentViewHolder); } else { parentViewHolder = (ParentViewHolder) convertView.getTag(); } //赋值 parentViewHolder.sellerNameTv.setText(dataBean.getSellerName()); //商家下商品是是否全部选中的值 boolean currentSellerAllProductSelected = isCurrentSellerAllProductSelected(groupPosition); //设置商家checkBox的状态 parentViewHolder.sellerCb.setChecked(currentSellerAllProductSelected); // parentViewHolder.sellerCb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onCartListChangeListener != null) { /*不懂*/ onCartListChangeListener.onSellerCheckedChange(groupPosition); } } }); return convertView; } //当前商家所有商品是否被选中 public boolean isCurrentSellerAllProductSelected(int groupPosition) { //获取商品集合 List<Guwbean.DataBean.ListBean> list = sellerData.get(groupPosition).getList(); //将商品集合遍历判断选择值 for (Guwbean.DataBean.ListBean listBean : list) { if (listBean.getSelected() == 0) { return false; } } return true; } @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { List<Guwbean.DataBean.ListBean> list = sellerData.get(groupPosition).getList(); Guwbean.DataBean.ListBean listBean = list.get(childPosition); ChildViewHolder childViewHolder; if(convertView==null){ convertView=View.inflate(parent.getContext(), R.layout.item_cart_child, null); childViewHolder = new ChildViewHolder(convertView); convertView.setTag(childViewHolder); } else{ childViewHolder=(ChildViewHolder) convertView.getTag(); } //商品名字 childViewHolder.productTitleNameTv.setText(listBean.getTitle()); //商品单价 childViewHolder.productPriceTv.setText(listBean.getPscid()+""); //商品的checkBox状态 childViewHolder.childCb.setChecked(listBean.getSelected() ==1); //商品的点击事件 childViewHolder.childCb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onCartListChangeListener!=null){ /*终*/ onCartListChangeListener.onProductCheckedChange(groupPosition,childPosition); } } }); childViewHolder.addRemoveView.setNumber(listBean.getNum()); //拿到商品最新的数量 childViewHolder.addRemoveView.setOnNumbelChanglistener(new MyAddSubView.OnNumbelChanglistener() { @Override public void OnNumbelChange(int num) { if(onCartListChangeListener!=null){ onCartListChangeListener.onProductNumberChange(groupPosition,childPosition,num); } } }); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return false; } //判断上商品是不是全部被选中 public boolean isAllProductsSelected(){ for(int i=0; i<sellerData.size();i++){ //获取商品的数据 Guwbean.DataBean dataBean = sellerData.get(i); List<Guwbean.DataBean.ListBean> list = dataBean.getList(); for(int j=0; j<list.size();j++){ if(list.get(j).getSelected()==0){ return false; } } } return true; } //计算商品的价格 public float calculateTotalPrice(){ float totaPrice =0; for (int i=0;i<sellerData.size();i++){ Guwbean.DataBean dataBean = sellerData.get(i); List<Guwbean.DataBean.ListBean> list = dataBean.getList(); for(int j=0; j<list.size();j++){ if (list.get(j).getSelected()==1) { //获取每个商品的单价 float price = list.get(j).getPrice(); //商品的数量 int num = list.get(j).getNum(); totaPrice+=price * num; } } } return totaPrice; } //商品的购买数量 public int calvulateTotalNumber(){ int totalNumber = 0; for (int i = 0; i < sellerData.size(); i++) { Guwbean.DataBean dataBean = sellerData.get(i); List<Guwbean.DataBean.ListBean> list = dataBean.getList(); for (int j = 0; j < list.size(); j++) { //只要是选中状态 if (list.get(j).getSelected() == 1) { int num = list.get(j).getNum(); totalNumber += num; } } } return totalNumber; } //当商家得checkbox被点击得时候调用,设置当前商家得所有商品得状态 public void changeCurrentSellerAllProductsStatus(int groupPosition, boolean isSelected) { Guwbean.DataBean dataBean = sellerData.get(groupPosition); List<Guwbean.DataBean.ListBean> listBeans = dataBean.getList(); for (int i = 0; i < listBeans.size(); i++) { Guwbean.DataBean.ListBean listBean = listBeans.get(i); listBean.setSelected(isSelected ? 1 : 0); } } //当商品得checkbox被点击得时候调用,改变当前商品状态 public void changeCurrentProductStatus(int groupPosition, int childPosition) { Guwbean.DataBean dataBean = sellerData.get(groupPosition); List<Guwbean.DataBean.ListBean> listBeans = dataBean.getList(); Guwbean.DataBean.ListBean listBean = listBeans.get(childPosition); listBean.setSelected(listBean.getSelected() == 0 ? 1 : 0); } //当加减器被点击得时候调用,改变当前商品得数量 public void changeCurrentProductNumber(int groupPosition, int childPosition, int number) { Guwbean.DataBean dataBean = sellerData.get(groupPosition); List<Guwbean.DataBean.ListBean> listBeans = dataBean.getList(); Guwbean.DataBean.ListBean listBean = listBeans.get(childPosition); listBean.setNum(number); } //设置所有商品得状态 public void changeAllProductsStatus(boolean selected) { for (int i = 0; i < sellerData.size(); i++) { Guwbean.DataBean dataBean = sellerData.get(i); List<Guwbean.DataBean.ListBean> list = dataBean.getList(); for (int j = 0; j < list.size(); j++) { list.get(j).setSelected(selected?1:0); } } } static class ParentViewHolder { @BindView(R.id.seller_cb) CheckBox sellerCb; @BindView(R.id.seller_name_tv) TextView sellerNameTv; ParentViewHolder(View view) { ButterKnife.bind(this, view); } } OnCartListChangeListener onCartListChangeListener; public void setOnCartListChangeListener(OnCartListChangeListener onCartListChangeListener) { this.onCartListChangeListener = onCartListChangeListener; } public interface OnCartListChangeListener { //传递的商家 void onSellerCheckedChange(int groupPostition); //传递精确的商品 void onProductCheckedChange(int groupPosition, int childPosition); //精确商品的增减器的变化 void onProductNumberChange(int groupPosition, int childPosition, int number); } static class ChildViewHolder { @BindView(R.id.child_cb) CheckBox childCb; @BindView(R.id.product_icon_iv) ImageView productIconIv; @BindView(R.id.product_title_name_tv) TextView productTitleNameTv; @BindView(R.id.product_price_tv) TextView productPriceTv; @BindView(R.id.add_remove_view) MyAddSubView addRemoveView; ChildViewHolder(View view) { ButterKnife.bind(this, view); } } }
购物车+-器 MyAddSubView
package com.example.thinkpad.wsjykmn.app; 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; import android.widget.Toast; import com.example.thinkpad.wsjykmn.R; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class MyAddSubView extends LinearLayout implements View.OnClickListener { //获取控件 @BindView(R.id.sun_tv) TextView sunTv; @BindView(R.id.product_number_tv) TextView productNumberTv; @BindView(R.id.add_tv) TextView addTv; private int number =1; public MyAddSubView(Context context) { super(context); } public MyAddSubView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); View view = inflate(context, R.layout.add_remove_view_layput, this); ButterKnife.bind(view); sunTv.setOnClickListener(this); addTv.setOnClickListener(this); } /* @OnClick({R.id.sun_tv, R.id.add_tv}) public void onViewClicked(View view) { switch (view.getId()) { //点击减号 case R.id.sun_tv: if(number>1){ --number; productNumberTv.setText(number+""); if(onNumbelChanglistener!=null){ onNumbelChanglistener.OnNumbelChange(number); } }else{ Toast.makeText(getContext(),"不能在少了",Toast.LENGTH_LONG).show(); } break; case R.id.add_tv: ++number; productNumberTv.setText(number+""); if(onNumbelChanglistener!=null){ onNumbelChanglistener.OnNumbelChange(number); } break; } }*/ public int getNumber() { return number; } public void setNumber(int number) { this.number = number; productNumberTv.setText(number+""); } OnNumbelChanglistener onNumbelChanglistener; public void setOnNumbelChanglistener(OnNumbelChanglistener onNumbelChanglistener) { this.onNumbelChanglistener = onNumbelChanglistener; } @Override public void onClick(View v) { switch (v.getId()) { //点击减号 case R.id.sun_tv: if(number>1){ --number; productNumberTv.setText(number+""); if(onNumbelChanglistener!=null){ onNumbelChanglistener.OnNumbelChange(number); } }else{ Toast.makeText(getContext(),"不能在少了",Toast.LENGTH_LONG).show(); } break; case R.id.add_tv: ++number; productNumberTv.setText(number+""); if(onNumbelChanglistener!=null){ onNumbelChanglistener.OnNumbelChange(number); } break; } } //告诉外面一种商品买了几个 interface OnNumbelChanglistener{ void OnNumbelChange(int num); } }
祝合控件 MyApp
package com.example.thinkpad.wsjykmn.app; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Color; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import com.example.thinkpad.wsjykmn.R; public class MyApp extends LinearLayout { public MyApp(Context context) { super(context); } public MyApp(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); } public MyApp(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyApp, 0, 0); String title_text = typedArray.getString(R.styleable.MyApp_title_text); String title_text_right = typedArray.getString(R.styleable.MyApp_title_text_right); int title_color = typedArray.getColor(R.styleable.MyApp_title_color, Color.BLACK); int title_color_right = typedArray.getColor(R.styleable.MyApp_title_color_right,Color.BLACK); View inflate = inflate(context, R.layout.gw_bia, this); TextView gw_bia_tv = inflate.findViewById(R.id.gw_bia_tv); TextView gw_right_tv = inflate.findViewById(R.id.gw_right_tv); gw_bia_tv.setText(title_text); gw_bia_tv.setTextColor(title_color); gw_right_tv.setTextColor(title_color_right); gw_right_tv.setText(title_text_right); } }
model
package com.example.thinkpad.wsjykmn.model; import com.example.thinkpad.wsjykmn.model.util.HttpConfig; import com.example.thinkpad.wsjykmn.model.util.OkHttpUtil; import java.util.HashMap; public class Gowumodel { public void login(final IGuwmodel iGuwmodel){ HashMap<String ,String> map = new HashMap<>(); map.put("uid","71"); OkHttpUtil instance = OkHttpUtil.getInstance(); instance.dopost(HttpConfig.gowu, map, new OkHttpUtil.OkCallback() { @Override public void onFailure(Exception e) { if (iGuwmodel!=null){ iGuwmodel.onFailure(e); } } @Override public void onResponse(String json) { if (iGuwmodel!=null){ iGuwmodel.onResponse(json); } } }); } public interface IGuwmodel{ void onFailure(Exception e); void onResponse(String json); } }
p层
package com.example.thinkpad.wsjykmn.pesntes; import com.example.thinkpad.wsjykmn.model.Gowumodel; import com.example.thinkpad.wsjykmn.model.bean.Guwbean; import com.example.thinkpad.wsjykmn.view.IGowu; import com.google.gson.Gson; import java.util.List; public class GowuPresenter { IGowu iGowu; private List<Guwbean.DataBean> sellerData; private final Gowumodel gowumodel; public GowuPresenter(IGowu iGowu){ this.iGowu=iGowu; gowumodel = new Gowumodel(); } public void login(){ gowumodel.login(new Gowumodel.IGuwmodel() { @Override public void onFailure(Exception e) { } @Override public void onResponse(String json) { Gson gson = new Gson(); Guwbean guwbean = gson.fromJson(json, Guwbean.class); sellerData = guwbean.getData(); if("0".equalsIgnoreCase(guwbean.getCode())){ if(iGowu!=null){ iGowu.onResponse(sellerData); } } } }); } }
view
package com.example.thinkpad.wsjykmn.view; import com.example.thinkpad.wsjykmn.model.bean.Guwbean; import java.util.List; public interface IGowu { void onResponse(List<Guwbean.DataBean> sellerData); }
package com.example.thinkpad.wsjykmn.view; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.Button; import android.widget.CheckBox; import android.widget.ExpandableListView; import android.widget.TextView; import com.example.thinkpad.wsjykmn.R; import com.example.thinkpad.wsjykmn.app.MyAdapter; import com.example.thinkpad.wsjykmn.model.bean.Guwbean; import com.example.thinkpad.wsjykmn.pesntes.GowuPresenter; import java.util.HashMap; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class MainActivity extends AppCompatActivity implements IGowu{ private static final String TAG = "MainActivity------"; @BindView(R.id.el_cart) ExpandableListView elCart; @BindView(R.id.cb_care_all_select) CheckBox cbCareAllSelect; @BindView(R.id.tv_cart_total_price) TextView tvCartTotalPrice; @BindView(R.id.btn_cart_pay) Button btnCartPay; private GowuPresenter gowuPresenter; private MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); initData(); } private void initData() { gowuPresenter = new GowuPresenter(this); gowuPresenter.login(); } @OnClick(R.id.cb_care_all_select) public void onViewClicked() { //底部全选按钮 //时候所有得商品都被选中 boolean allProductsSelected = myAdapter.isAllProductsSelected(); myAdapter.changeAllProductsStatus(!allProductsSelected); myAdapter.notifyDataSetChanged(); //刷新底部数据 refreshSelectedAndTotalPriceAndTotalNumber(); } @Override public void onResponse(List<Guwbean.DataBean> sellerData) { Log.d(TAG, "onResponse: "+"741852963jkghnnvbdghfyjfgjk"); myAdapter = new MyAdapter(sellerData); myAdapter.setOnCartListChangeListener(new MyAdapter.OnCartListChangeListener() { @Override public void onSellerCheckedChange(int groupPostition) { //商家被点击 boolean currentSellerAllProductSelected = myAdapter.isCurrentSellerAllProductSelected(groupPostition); myAdapter.changeCurrentSellerAllProductsStatus(groupPostition,!currentSellerAllProductSelected); myAdapter.notifyDataSetChanged(); //刷新底部数据 refreshSelectedAndTotalPriceAndTotalNumber(); } @Override public void onProductCheckedChange(int groupPosition, int childPosition) { //点击商品得checkbox myAdapter.changeCurrentProductStatus(groupPosition,childPosition); myAdapter.notifyDataSetChanged(); //刷新底部数据 refreshSelectedAndTotalPriceAndTotalNumber(); } @Override public void onProductNumberChange(int groupPosition, int childPosition, int number) { //当加减被点击 myAdapter.changeCurrentProductNumber(groupPosition,childPosition,number); myAdapter.notifyDataSetChanged(); //刷新底部数据 refreshSelectedAndTotalPriceAndTotalNumber(); //联网更新网络上得商品数量 } }); elCart.setAdapter(myAdapter); //展开二级列表 for (int i=0;i<sellerData.size();i++){ elCart.expandGroup(i); } //刷新checkbox状态和总价和总数量 refreshSelectedAndTotalPriceAndTotalNumber(); } //刷新checkbox状态和总价和总数量 private void refreshSelectedAndTotalPriceAndTotalNumber() { //去判断是否所有得商品都被选中 boolean allProductsSelected = myAdapter.isAllProductsSelected(); //设置给全选checkBox cbCareAllSelect.setChecked(allProductsSelected);//cbCartAllSelect //计算总价 float totalPrice = myAdapter.calculateTotalPrice(); tvCartTotalPrice.setText("总价 " + totalPrice); //计算总数量 int totalNumber = myAdapter.calvulateTotalNumber(); btnCartPay.setText("去结算(" + totalNumber + ")"); } }