MainActivity进行结算和勾选的算法
package com.bawei.myshopcar.activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import com.bawei.myshopcar.Apis;
import com.bawei.myshopcar.Bean.ShopBean;
import com.bawei.myshopcar.Bean.ShopTypeBean;
import com.bawei.myshopcar.Constants;
import com.bawei.myshopcar.R;
import com.bawei.myshopcar.adapter.ShopAdapter;
import com.bawei.myshopcar.adapter.ShopTypeAdapter;
import com.bawei.myshopcar.presenter.IPresenterImpl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ShopCarActivity extends AppCompatActivity implements IView, View.OnClickListener {
private ShopAdapter mShopAdapter;
private CheckBox mIvCircle;
private List<ShopBean.DataBean> mList = new ArrayList<>();
private TextView mAllPriceTxt, nSumPrice;
private IPresenterImpl mIPresenterImpl;
private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product_list);
mIPresenterImpl = new IPresenterImpl(this);
initView();
getData();
}
@Override
protected void onDestroy() {
super.onDestroy();
mIPresenterImpl.onDetach();
}
private void initView() {
mIvCircle = (CheckBox) findViewById(R.id.iv_cricle);
mAllPriceTxt = (TextView) findViewById(R.id.all_price);
nSumPrice = (TextView) findViewById(R.id.sum_price_txt);
mIvCircle.setOnClickListener(this);
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(linearLayoutManager);
mShopAdapter = new ShopAdapter(this);
mRecyclerView.setAdapter(mShopAdapter);
mShopAdapter.setListener(new ShopAdapter.ShopCallBackListener() {
@Override
public void callBack(List<ShopBean.DataBean> list) {
//在这里重新遍历已经改状态后的数据,
// 这里不能break跳出,因为还需要计算后面点击商品的价格和数目,所以必须跑完整个循环
double totalPrice = 0;
//勾选商品的数量,不是该商品购买的数量
int num = 0;
//所有商品总数,和上面的数量做比对,如果两者相等,则说明全选
int totalNum = 0;
for (int a = 0; a < list.size(); a++) {
//获取商家里商品
List<ShopBean.DataBean.ListBean> listAll = list.get(a).getList();
for (int i = 0; i < listAll.size(); i++) {
totalNum = totalNum + listAll.get(i).getNum();
//取选中的状态
if (listAll.get(i).isCheck()) {
totalPrice = totalPrice + (listAll.get(i).getPrice() * listAll.get(i).getNum());
num = num + listAll.get(i).getNum();
}
}
}
if (num < totalNum) {
//不是全部选中
mIvCircle.setChecked(false);
} else {
//是全部选中
mIvCircle.setChecked(true);
}
mAllPriceTxt.setText("合计:" + totalPrice);
nSumPrice.setText("去结算(" + num + ")");
}
});
}
private void getData() {
Map<String, String> map = new HashMap<>();
map.put(Constants.MAP_KEY_GET_PRODUCT_UID, "71");
mIPresenterImpl.startRequest(Apis.URL_GET_SHOP_CAR_INFO, map, ShopBean.class);
}
@Override
public void showResponseData(Object data) {
if (data instanceof ShopBean) {
ShopBean shopBean = (ShopBean) data;
mList = shopBean.getData();
if (mList != null) {
mList.remove(0);
mShopAdapter.setList(mList);
}
}
}
@Override
public void showResponseFail(Object data) {
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_cricle:
checkSeller(mIvCircle.isChecked());
mShopAdapter.notifyDataSetChanged();
break;
default:
}
}
/**
* 修改选中状态,获取价格和数量
*/
private void checkSeller(boolean bool) {
double totalPrice = 0;
int num = 0;
for (int a = 0; a < mList.size(); a++) {
//遍历商家,改变状态
ShopBean.DataBean dataBean = mList.get(a);
dataBean.setCheck(bool);
List<ShopBean.DataBean.ListBean> listAll = mList.get(a).getList();
for (int i = 0; i < listAll.size(); i++) {
//遍历商品,改变状态
listAll.get(i).setCheck(bool);
totalPrice = totalPrice + (listAll.get(i).getPrice() * listAll.get(i).getNum());
num = num + listAll.get(i).getNum();
}
}
if (bool) {
mAllPriceTxt.setText("合计:" + totalPrice);
nSumPrice.setText("去结算(" + num + ")");
} else {
mAllPriceTxt.setText("合计:0.00");
nSumPrice.setText("去结算(0)");
}
}
}
商家适配器 帮顶视图的时候嵌套商品的RecyclerView
package com.bawei.myshopcar.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
import com.bawei.myshopcar.Bean.ShopBean;
import com.bawei.myshopcar.R;
import java.util.ArrayList;
import java.util.List;
/**
-
展示商家的适配器
*/
public class ShopAdapter extends RecyclerView.Adapter<ShopAdapter.MyViewHolder> {
private List<ShopBean.DataBean> mList = new ArrayList<>();
private Context mContext;public ShopAdapter(Context context) {
this.mContext = context;
}@NonNull
@Override
public ShopAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(mContext, R.layout.shop_seller_car_adapter, null);
MyViewHolder myViewHoler = new MyViewHolder(view);
return myViewHoler;
}@Override
public void onBindViewHolder(@NonNull final ShopAdapter.MyViewHolder myViewHolder, final int i) {
//设置商家的名字
myViewHolder.mSellerName.setText(mList.get(i).getSellerName());
final ProductsAdapter productsAdapter = new ProductsAdapter(mContext, mList.get(i).getList());
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
myViewHolder.mRecyclerView.setLayoutManager(linearLayoutManager);
myViewHolder.mRecyclerView.setAdapter(productsAdapter);myViewHolder.mCheck.setChecked(mList.get(i).isCheck()); productsAdapter.setListener(new ProductsAdapter.ShopCallBackListener() { @Override public void callBack() { //从商品适配里回调回来,回给activity,activity计算价格和数量 if(mShopCallBackListener != null) { mShopCallBackListener.callBack(mList); } List<ShopBean.DataBean.ListBean> listBeans = mList.get(i).getList(); //创建一个临时的标志位,用来记录现在点击的状态 boolean isAllChecked = true; for (ShopBean.DataBean.ListBean bean : listBeans) { if (!bean.isCheck()) { //只要有一个商品未选中,标志位设置成false,并且跳出循环 isAllChecked = false; break; } } //刷新商家的状态 myViewHolder.mCheck.setChecked(isAllChecked); mList.get(i).setCheck(isAllChecked); } }); //监听checkBox的点击事件 //目的是改变旗下所有商品的选中状态 myViewHolder.mCheck.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //首先改变自己的标志位 mList.get(i).setCheck(myViewHolder.mCheck.isChecked()); //调用产品adapter的方法,用来全选和反选 productsAdapter.selectOrRemoveAll(myViewHolder.mCheck.isChecked()); } });
}
@Override
public int getItemCount() {
return mList.size();
}public void setList(List<ShopBean.DataBean> list) {
this.mList = list;
notifyDataSetChanged();
}public class MyViewHolder extends RecyclerView.ViewHolder {
RecyclerView mRecyclerView;
TextView mSellerName;
CheckBox mCheck;public MyViewHolder(@NonNull View itemView) { super(itemView); mSellerName = (TextView) itemView.findViewById(R.id.tv_shop); mCheck = itemView.findViewById(R.id.check_shop); mRecyclerView = (RecyclerView) itemView.findViewById(R.id.recycler_shop); }
}
private ShopCallBackListener mShopCallBackListener;
public void setListener(ShopCallBackListener listener) {
this.mShopCallBackListener = listener;
}public interface ShopCallBackListener {
void callBack(List<ShopBean.DataBean> list);
}
}
商品适配器
package com.bawei.myshopcar.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import com.bawei.myshopcar.Bean.ShopBean;
import com.bawei.myshopcar.R;
import com.bawei.myshopcar.view.CustomCounterView;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
import java.util.List;
/**
-
展示商家里的商品
*/
public class ProductsAdapter extends RecyclerView.Adapter<ProductsAdapter.MyViewHolder> {
private Context mContext;
private List<ShopBean.DataBean.ListBean> mList = new ArrayList<>();public ProductsAdapter(Context context, List<ShopBean.DataBean.ListBean> list) {
this.mContext = context;
this.mList = list;
}@NonNull
@Override
public ProductsAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(mContext, R.layout.shop_car_adapter, null);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}@Override
public void onBindViewHolder(@NonNull ProductsAdapter.MyViewHolder myViewHolder, final int i) {
String url = mList.get(i).getImages().split("\|")[0].replace(“https”, “http”);
Glide.with(mContext).load(url).into(myViewHolder.mImage);myViewHolder.mTitle.setText(mList.get(i).getTitle()); myViewHolder.mPrice.setText(mList.get(i).getPrice() + ""); //根据我记录的状态,改变勾选 myViewHolder.mCheckBox.setChecked(mList.get(i).isCheck()); //商品的跟商家的有所不同,商品添加了选中改变的监听 myViewHolder.mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { //优先改变自己的状态 mList.get(i).setCheck(isChecked); //回调,目的是告诉activity,有人选中状态被改变 if (mShopCallBackListener != null) { mShopCallBackListener.callBack(); } } }); //设置自定义View里的Edit myViewHolder.mCustomShopCarPrice.setData(this, mList, i); myViewHolder.mCustomShopCarPrice.setOnCallBack(new CustomCounterView.CallBackListener() { @Override public void callBack() { if (mShopCallBackListener != null) { mShopCallBackListener.callBack(); } } });
}
@Override
public int getItemCount() {
return mList.size();
}public class MyViewHolder extends RecyclerView.ViewHolder {
CustomCounterView mCustomShopCarPrice;
TextView mTitle, mPrice;
ImageView mImage;
CheckBox mCheckBox;public MyViewHolder(@NonNull View itemView) { super(itemView); mImage = (ImageView) itemView.findViewById(R.id.iv_product); mTitle = (TextView) itemView.findViewById(R.id.tv_product_title); mPrice = (TextView) itemView.findViewById(R.id.tv_product_price); mCheckBox = (CheckBox) itemView.findViewById(R.id.check_product); mCustomShopCarPrice = (CustomCounterView) itemView.findViewById(R.id.custom_product_counter); }
}
/**
-
在我们子商品的adapter中,修改子商品的全选和反选
-
@param isSelectAll
*/
public void selectOrRemoveAll(boolean isSelectAll) {
for (ShopBean.DataBean.ListBean listBean : mList) {
listBean.setCheck(isSelectAll);
}notifyDataSetChanged();
}
private ShopCallBackListener mShopCallBackListener;
public void setListener(ShopCallBackListener listener) {
this.mShopCallBackListener = listener;
}public interface ShopCallBackListener {
void callBack();
}
} -