widght-AddDecreaseView
package com.example.dsover.gouwuche.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.example.dsover.R;
/**
* Created by 红鼻子小黑 on 2018/10/25.
*/
public class AddDecreaseView extends RelativeLayout implements View.OnClickListener {
private TextView txtAdd;
private TextView txtDecrease;
private TextView txtNum;
private int num;
public interface OnAddDecreaseClickListener{
void add(int num);
void decrease(int num);
}
private OnAddDecreaseClickListener listener;
public void setOnAddDecreaseClickListener(OnAddDecreaseClickListener listener){
this.listener = listener;
}
public AddDecreaseView(Context context) {
this(context,null);
}
public AddDecreaseView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public AddDecreaseView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
View.inflate(context, R.layout.item_add_decrease,this);
txtAdd = findViewById(R.id.txt_add);
txtDecrease = findViewById(R.id.txt_decrease);
txtNum = findViewById(R.id.txt_num);
txtNum.setText("1");
txtAdd.setOnClickListener(this);
txtDecrease.setOnClickListener(this);
}
public void setNum(int num){
this.num = num;
txtNum.setText(num+"");
}
public int getNum(){
return num;
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.txt_add:
num++;
txtNum.setText(num+"");
if (listener!=null){
listener.add(num);
}
break;
case R.id.txt_decrease:
if (num>1){
num--;
}
txtNum.setText(num+"");
if (listener!=null){
listener.decrease(num);
}
}
}
}
GWC主页面
package com.example.dsover.fragment; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.CheckBox; import android.widget.TextView; import android.widget.Toast; import com.example.dsover.R; import com.example.dsover.bean.MessagerBean; import com.example.dsover.bean.Product; import com.example.dsover.bean.Shopper; import com.example.dsover.gouwuche.adapter.ProductAdapter; import com.example.dsover.gouwuche.adapter.ShopperAdapter; import com.example.dsover.gouwuche.cart.presenter.CartPresenter; import com.example.dsover.gouwuche.cart.view.IView; import java.util.ArrayList; import java.util.List; /** * Created by 红鼻子小黑 on 2018/10/25. */ public class GwcFragment extends Fragment implements IView{ private TextView txtEditFinsh; private CheckBox cbtal; private TextView txtPrice; private Button btnCalu; private RecyclerView rvShopper; private List<Shopper<List<Product>>> list; private ShopperAdapter shopperAdapter; private CartPresenter cartPresenter; private View view; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.item_gwc,container,false); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initView(); initData(); setListener(); } private void setListener() { cbtal.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { boolean isChecked = cbtal.isChecked(); for (Shopper<List<Product>> listShopper:list){ listShopper.setChecked(isChecked); List<Product> products = listShopper.getList(); for (Product product : products){ product.setChecked(isChecked); } } shopperAdapter.notifyDataSetChanged(); } }); } private void initData() { list = new ArrayList<>(); shopperAdapter = new ShopperAdapter(getActivity(),list); shopperAdapter.setOnShopperClickListener(new ShopperAdapter.OnShopperClickListener() { @Override public void onShopperClick(int position, boolean isCheck) { if (!isCheck){ cbtal.setChecked(false); }else{ boolean isAllShopperChecked = true; for (Shopper<List<Product>> listShopper :list){ if (!listShopper.isChecked()){ isAllShopperChecked = false; break; } } cbtal.setChecked(isAllShopperChecked); } calculatePrice(); } }); shopperAdapter.setOnAddDecreaseProductListener(new ProductAdapter.OnAddDecreaseProductListener() { @Override public void onChange(int position, int num) { calculatePrice(); } }); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity()); rvShopper.setLayoutManager(layoutManager); rvShopper.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL)); rvShopper.setAdapter(shopperAdapter); cartPresenter = new CartPresenter(); cartPresenter.attch(this); cartPresenter.getData(); } private void calculatePrice() { float totalPrice = 0; for (Shopper<List<Product>> listShopper : list){ List<Product> list = listShopper.getList(); for (Product product : list){ if (product.isChecked()){ totalPrice += product.getNum() * product.getPrice(); } } } txtPrice.setText("总价:" + totalPrice); } private void initView() { txtEditFinsh = view.findViewById(R.id.txt_edit_or_finish); cbtal = view.findViewById(R.id.cb_total_select); txtPrice = view.findViewById(R.id.txt_total_price); btnCalu = view.findViewById(R.id.btn_calu); rvShopper = view.findViewById(R.id.rv_shopper); } @Override public void success(MessagerBean<List<Shopper<List<Product>>>> data) { if (data!=null){ List<Shopper<List<Product>>> shoppers = data.getData(); if (shoppers!=null){ list.clear(); list.addAll(shoppers); shopperAdapter.notifyDataSetChanged(); } } } @Override public void failed(Exception e) { Toast.makeText(getActivity(),e.getMessage(),Toast.LENGTH_SHORT).show(); } @Override public void onDestroy() { super.onDestroy(); if (cartPresenter!=null){ cartPresenter.detach(); } } }
shopperAdapter
package com.example.dsover.gouwuche.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.CompoundButton; import android.widget.TextView; import com.example.dsover.R; import com.example.dsover.bean.Product; import com.example.dsover.bean.Shopper; import java.util.List; /** * Created by 红鼻子小黑 on 2018/10/25. */ public class ShopperAdapter extends RecyclerView.Adapter<ShopperAdapter.ViewHolder>{ private Context context; private List<Shopper<List<Product>>> list; public ShopperAdapter(Context context, List<Shopper<List<Product>>> list) { this.context = context; this.list = list; } public interface OnShopperClickListener{ void onShopperClick(int position,boolean isCheck); } private OnShopperClickListener shopperClickListener; public void setOnShopperClickListener(OnShopperClickListener listener){ this.shopperClickListener = listener; } private ProductAdapter.OnAddDecreaseProductListener productListener; public void setOnAddDecreaseProductListener(ProductAdapter.OnAddDecreaseProductListener listener){ this.productListener = listener; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = View.inflate(context,R.layout.item_shopper,null); ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(@NonNull ViewHolder holder, final int position) { final Shopper<List<Product>> shopper = list.get(position); holder.txtShopperName.setText(shopper.getSellerName()); RecyclerView.LayoutManager playoutManager = new LinearLayoutManager(context); holder.rvProduct.setLayoutManager(playoutManager); final ProductAdapter productAdapter = new ProductAdapter(context,shopper.getList()); if (productListener!=null){ productAdapter.setOnAddDecreaseProductListener(productListener); } productAdapter.setOnProductClickListener(new ProductAdapter.OnproductClickListener() { @Override public void onProductClick(int position, boolean isChecked) { if (!isChecked){ shopper.setChecked(false); shopperClickListener.onShopperClick(position,false); }else{ boolean isAllProductSelected = true; for (Product product:shopper.getList()){ if (!product.isChecked()){ isAllProductSelected = false; break; } } shopper.setChecked(isAllProductSelected); shopperClickListener.onShopperClick(position,true); } notifyDataSetChanged(); productListener.onChange(0,0); } }); holder.rvProduct.setAdapter(productAdapter); holder.cbHopper.setOnCheckedChangeListener(null); holder.cbHopper.setChecked(shopper.isChecked()); holder.cbHopper.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { shopper.setChecked(isChecked); List<Product> productList = shopper.getList(); for (Product product : productList){ product.setChecked(isChecked); } productAdapter.notifyDataSetChanged(); if (shopperClickListener!=null){ shopperClickListener.onShopperClick(position,isChecked); } } }); } @Override public int getItemCount() { return list.size(); } class ViewHolder extends RecyclerView.ViewHolder{ private CheckBox cbHopper; private TextView txtShopperName; private RecyclerView rvProduct; public ViewHolder (View itemView){ super(itemView); cbHopper = itemView.findViewById(R.id.cb_shopper); txtShopperName = itemView.findViewById(R.id.txt_shopper_name); rvProduct = itemView.findViewById(R.id.rv_product); } } }
product
package com.example.dsover.gouwuche.adapter; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; 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.bumptech.glide.Glide; import com.example.dsover.R; import com.example.dsover.bean.Product; import com.example.dsover.gouwuche.widget.AddDecreaseView; import com.example.dsover.utils.StringUtils; import java.util.List; /** * Created by 红鼻子小黑 on 2018/10/25. */ public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ViewHolder>{ private Context context; private List<Product> list; public interface OnproductClickListener{ void onProductClick(int position,boolean isChecked); } private OnproductClickListener productClickListener; public void setOnProductClickListener(OnproductClickListener listener){ this.productClickListener = listener; } public interface OnAddDecreaseProductListener{ void onChange(int position,int num); } private OnAddDecreaseProductListener productListener; public void setOnAddDecreaseProductListener(OnAddDecreaseProductListener listener){ this.productListener = listener; } public ProductAdapter(Context context, List<Product> list) { this.context = context; this.list = list; } @NonNull @Override public ProductAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = View.inflate(context,R.layout.item_product,null); ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(@NonNull ProductAdapter.ViewHolder holder, final int position) { final Product product = list.get(position); String imgs = product.getImages(); if (!TextUtils.isEmpty(imgs)) { String[] strings = imgs.split("\\|"); if (strings.length > 0) { Glide.with(context).load(StringUtils.Http2Http(strings[0])) .into(holder.imgProduct); } } holder.texProductName.setText(product.getTitle()); holder.txtsinglePriice.setText(String.valueOf(product.getPrice())); holder.advProduct.setNum(product.getNum()); holder.advProduct.setOnAddDecreaseClickListener(new AddDecreaseView.OnAddDecreaseClickListener() { @Override public void add(int num) { product.setNum(num); if (productListener !=null){ productListener.onChange(position,num); } } @Override public void decrease(int num) { product.setNum(num); if (productListener !=null){ productListener.onChange(position,num); } } }); holder.cbProduct.setOnCheckedChangeListener(null); holder.cbProduct.setChecked(product.isChecked()); holder.cbProduct.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { product.setChecked(isChecked); if (productClickListener !=null){ productClickListener.onProductClick(position,isChecked); } } }); } @Override public int getItemCount() { return list.size(); } class ViewHolder extends RecyclerView.ViewHolder{ private CheckBox cbProduct; private ImageView imgProduct; private TextView texProductName; private TextView txtsinglePriice; private AddDecreaseView advProduct; public ViewHolder(View itemView){ super(itemView); cbProduct = itemView.findViewById(R.id.cb_product); imgProduct = itemView.findViewById(R.id.img_product); texProductName = itemView.findViewById(R.id.txt_product_name); txtsinglePriice = itemView.findViewById(R.id.txt_single_price); advProduct = itemView.findViewById(R.id.adv_product); } } }