1.商品adapter
package com.wen.yuekao; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.TextView; import android.widget.Toast; import com.github.nukc.amountview.AmountView; import java.util.List; public class MyChildAdaptr extends RecyclerView.Adapter<MyChildAdaptr.MyViewHolder>{ private Context context; private List<ChildBean> list; public MyChildAdaptr(Context context, List<ChildBean> list) { this.context = context; this.list = list; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.child_item, null); MyViewHolder holder = new MyViewHolder(view); return holder; } @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { holder.name.setText(list.get(position).getName()); holder.price.setText(list.get(position).getPrice()+""); holder.isSelect.setChecked(list.get(position).isCheck()); holder.productNum.setGoods_storage(10);//设置库存 final TextView num = holder.productNum.findViewById(R.id.tvAmount); num.setText(list.get(position).getNum()+""); holder.productNum.setListener(new AmountView.OnAmountChangeListener() { @Override public void onAmountChange(View view, int amount) { list.get(position).setCheck(true); holder.isSelect.setChecked(list.get(position).isCheck()); num.setText(amount+""); Toast.makeText(context, amount+"", Toast.LENGTH_SHORT).show(); System.out.println("商品加减号=="+amount); if(childCheckBoxListener!=null){ childCheckBoxListener.OnProductNum(amount,position); } } }); holder.isSelect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(holder.isSelect.isChecked()){ list.get(position).setCheck(true); }else{ list.get(position).setCheck(false); } if(childCheckBoxListener!=null){ //设置商品的点击事件 childCheckBoxListener.onChild(position); } } }); } @Override public int getItemCount() { return list.size(); } public class MyViewHolder extends RecyclerView.ViewHolder { TextView name; TextView price; CheckBox isSelect; AmountView productNum; public MyViewHolder(View itemView) { super(itemView); name = itemView.findViewById(R.id.tv_name); price = itemView.findViewById(R.id.tv_price); isSelect = itemView.findViewById(R.id.cb_child_checko); productNum = itemView.findViewById(R.id.av_product_Num); } } private onChildCheckBoxListener childCheckBoxListener; public void setChildCheckBoxListener(onChildCheckBoxListener childCheckBoxListener){ this.childCheckBoxListener = childCheckBoxListener; } interface onChildCheckBoxListener{ void onChild(int childposition); void OnProductNum(int num,int childposition); } }
2.店铺adapter
package com.wen.yuekao; import android.content.Context; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.TextView; import java.util.List; public class MyParentAdaptr extends RecyclerView.Adapter<MyParentAdaptr.MyViewHolder> { private List<ParentBean> parentlist; private Context context; public MyParentAdaptr(List<ParentBean> parentlist, Context context) { this.parentlist = parentlist; this.context = context; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.item, null); MyViewHolder holder = new MyViewHolder(view); return holder; } @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { final List<ChildBean> childlist = parentlist.get(position).getChildlist(); boolean flag=true; for (ChildBean childBean : childlist) {//遍历商品如果有一个没有选中则店铺不选中 if(childBean.isCheck()==false){ flag=false; } } holder.checkBox.setChecked(flag); holder.name.setText(parentlist.get(position).getParentname()); holder.recyclerView.setLayoutManager(new GridLayoutManager(context,1)); final MyChildAdaptr adapter = new MyChildAdaptr(context, parentlist.get(position).getChildlist()); holder.recyclerView.setAdapter(adapter); holder.checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { boolean flag=false; if(holder.checkBox.isChecked()){ flag=true; }else{ flag=false; } for (ChildBean childBean : childlist) { childBean.setCheck(flag); } //商品选中改变后,刷新商品adapter adapter.notifyDataSetChanged(); if(onParentClicklistener!=null){ onParentClicklistener.ParentClick(position); } } }); adapter.setChildCheckBoxListener(new MyChildAdaptr.onChildCheckBoxListener() { @Override public void onChild(int childposition) { boolean flag = true; for (ChildBean childBean : childlist) { if(childBean.isCheck()==false){ flag = false; } } System.out.println("点击=="+flag); holder.checkBox.setChecked(flag); if (onParentClicklistener!=null){ onParentClicklistener.ChildClick(position,childposition); } } @Override public void OnProductNum(int num, int childposition) { boolean flag = true; for (ChildBean childBean : parentlist.get(position).getChildlist()) { if(childBean.isCheck()==false){ flag = false; } } holder.checkBox.setChecked(flag); adapter.notifyDataSetChanged(); if(onParentClicklistener!=null){ onParentClicklistener.updateProductNum(childposition,position,num); } } }); } @Override public int getItemCount() { return parentlist.size(); } public class MyViewHolder extends RecyclerView.ViewHolder { TextView name; RecyclerView recyclerView; CheckBox checkBox; public MyViewHolder(View itemView) { super(itemView); name=itemView.findViewById(R.id.tv_name); checkBox = itemView.findViewById(R.id.cb_checkbox); recyclerView = itemView.findViewById(R.id.rv_parent_list); } } private OnParentClicklistener onParentClicklistener; public void setParentlistener(OnParentClicklistener onParentClicklistener){ this.onParentClicklistener=onParentClicklistener; } interface OnParentClicklistener{ void ParentClick(int parentposition); void ChildClick(int parentposition,int childposition); void updateProductNum(int childposition,int parentposition,int num); } }
3.activity回调接口
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ @InjectView(R.id.rv_list) RecyclerView rvList; @InjectView(R.id.cb_allcheck) CheckBox cbAllcheck; @InjectView(R.id.tv_sumNum) TextView tvSumNum; @InjectView(R.id.tv_sumPrice) TextView tvSumPrice; private List<ChildBean> childList; private List<ParentBean> parentlist; private int productNumSum; private double productPriceSum; private DecimalFormat decimalFormat; private MyParentAdaptr adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.inject(this); decimalFormat = new DecimalFormat("#0.00"); initView(); initData(); showAdapter(); } private void showAdapter() { adapter = new MyParentAdaptr(parentlist, this); rvList.setAdapter(adapter); adapter.setParentlistener(new MyParentAdaptr.OnParentClicklistener() { @Override public void ParentClick(int parentposition) {//店铺的点击事件 List<ChildBean> childlist = parentlist.get(parentposition).getChildlist();//得到当前点击店铺下商品的集合 for (ChildBean childBean : childlist) { if (childBean.isCheck() == true) { productNumSum=productNumSum+childBean.getNum();//统计商品选择数量 productPriceSum = productPriceSum +Double.parseDouble(childBean.getPrice() * childBean.getNum()+"") ;//统计价格 }else{ productNumSum=productNumSum-childBean.getNum(); productPriceSum = productPriceSum-Double.parseDouble(childBean.getPrice() * childBean.getNum()+""); } } tvSumNum.setText("商品个数:"+productNumSum); tvSumPrice.setText("商品价格:"+decimalFormat.format(productPriceSum)+""); // TODO: 此处可以进行网络请求,改变后台数据 adapter.notifyDataSetChanged();//刷新数据 boolean flag = true; for (ParentBean parentBean : parentlist) { for (ChildBean childBean : parentBean.getChildlist()){//遍历所有商品 if(childBean.isCheck()==false){ flag=false; } } } cbAllcheck.setChecked(flag); } @Override public void ChildClick(int parentposition, int childposition) {//商品的点击事件 ChildBean childBean1 = parentlist.get(parentposition).getChildlist().get(childposition); if(childBean1.isCheck()==true){ productNumSum=productNumSum+childBean1.getNum(); productPriceSum = productPriceSum + Double.parseDouble(childBean1.getPrice()*childBean1.getNum()+""); }else{ productNumSum=productNumSum-childBean1.getNum(); productPriceSum = productPriceSum - Double.parseDouble(childBean1.getPrice()*childBean1.getNum()+""); } tvSumNum.setText("商品个数:"+productNumSum); tvSumPrice.setText("商品价格:"+decimalFormat.format(productPriceSum)+""); // TODO: 此处可以进行网络请求,同时改变后台数据 adapter.notifyDataSetChanged();//刷新数据 boolean flag = true; for (ParentBean parentBean : parentlist) { for (ChildBean childBean : parentBean.getChildlist()) { if(childBean.isCheck()==false){ flag = false; } } } cbAllcheck.setChecked(flag); } @Override public void updateProductNum(int childposition, int parentposition, int num) {//商品数量加减的监听ChildBean childBean = parentlist.get(parentposition).getChildlist().get(childposition); if(childBean.isCheck()==true){ int newNum = num - childBean.getNum(); System.out.println("数量num=="+num); System.out.println("数量childBean1.getNum*******"+childBean.getNum()); System.out.println("数量cb.getNum=="+childBean.getNum()); System.out.println("******newNum*****"+newNum); productNumSum = productNumSum+newNum; productPriceSum = productPriceSum+Double.parseDouble(childBean.getPrice()+"")*newNum; }else{ parentlist.get(parentposition).getChildlist().get(childposition).setCheck(true); productNumSum = productNumSum+num; productPriceSum = productPriceSum+Double.parseDouble(childBean.getPrice()+"")*num; } parentlist.get(parentposition).getChildlist().get(childposition).setNum(num); tvSumNum.setText("商品个数:"+productNumSum); tvSumPrice.setText("商品价格:"+decimalFormat.format(productPriceSum)+"");} }); }
private void initView() { cbAllcheck.setOnClickListener(this); rvList.setLayoutManager(new GridLayoutManager(this, 1)); } private void initData() { childList = new ArrayList<>(); parentlist = new ArrayList<>(); //添加第一个店铺 childList.add(new ChildBean("商品1", 40, 1, false)); childList.add(new ChildBean("商品2", 30, 1, false)); parentlist.add(new ParentBean("店铺1", childList)); ArrayList<ChildBean> childList1 = new ArrayList<>(); //添加第二个店铺 childList1.add(new ChildBean("商品A", 10, 1, false)); childList1.add(new ChildBean("商品B", 15, 1, false)); parentlist.add(new ParentBean("店铺2", childList1)); ArrayList<ChildBean> childList2 = new ArrayList<>(); //添加第三个店铺 childList2.add(new ChildBean("商品I", 25, 1, false)); parentlist.add(new ParentBean("店铺3", childList2)); ArrayList<ChildBean> childList3 = new ArrayList<>(); //添加第4个店铺 childList3.add(new ChildBean("商品1", 30, 1, false)); parentlist.add(new ParentBean("店铺4", childList3)); ArrayList<ChildBean> childList4 = new ArrayList<>(); //添加第二个店铺 childList4.add(new ChildBean("商品A", 10, 1, false)); childList4.add(new ChildBean("商品B", 15, 1, false)); parentlist.add(new ParentBean("店铺5", childList4)); ArrayList<ChildBean> childList5 = new ArrayList<>(); //添加第4个店铺 childList5.add(new ChildBean("商品1", 30, 1, false)); parentlist.add(new ParentBean("店铺4", childList5)); ArrayList<ChildBean> childList6 = new ArrayList<>(); //添加第二个店铺 childList6.add(new ChildBean("商品A", 10, 1, false)); childList6.add(new ChildBean("商品B", 15, 1, false)); parentlist.add(new ParentBean("店铺5", childList6)); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.cb_allcheck: Toast.makeText(this, "全选", Toast.LENGTH_SHORT).show(); AllSelect(); break; } } private void AllSelect() { if(cbAllcheck.isChecked()){ for (ParentBean parentBean : parentlist) { for (ChildBean childBean : parentBean.getChildlist()) { if(childBean.isCheck()==false){ productNumSum=productNumSum+childBean.getNum(); productPriceSum = productPriceSum + Double.parseDouble(childBean.getPrice()*childBean.getNum()+""); childBean.setCheck(true);//全选为true时,同时将为false的商品设置为true,并且进行价格,数量,运算 // TODO: 此处可以进行网络请求改变后台数据 } } } }else{ for (ParentBean parentBean : parentlist) { for (ChildBean childBean : parentBean.getChildlist()) { if(childBean.isCheck()==true){ productNumSum=productNumSum-childBean.getNum(); productPriceSum = productPriceSum - Double.parseDouble(childBean.getPrice()*childBean.getNum()+""); childBean.setCheck(false);//全选为false时,同时将为true的商品设置为false,并且进行价格,数量,运算 // TODO: 此处可以进行网络请求改变后台数据 } } } } tvSumNum.setText("商品个数:"+productNumSum); tvSumPrice.setText("商品价格:"+decimalFormat.format(productPriceSum)+""); adapter.notifyDataSetChanged(); }