购物车,

 

商家Adapter:

public class ShopperAdapter extends RecyclerView.Adapter<ShopperAdapter.ViewHolder> {

    private Context context;
    private List<CartBean.DataBean> list;

    public ShopperAdapter(Context context, List<CartBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    // 一级列表发生变化的监听
    public interface OnShopperClickListener {
        void onShopperClick(int position, boolean isChecked);
    }

    private OnShopperClickListener onShopperClickListener;

    public void setOnShopperClickListener(OnShopperClickListener onShopperClickListener) {
        this.onShopperClickListener = onShopperClickListener;
    }

    // 二级列表的加减器监听
    public ProductAdapter.OnAddDecreaseProductListener onAddDecreaseProductListener;

    public void setOnAddDecreaseProductListener(ProductAdapter.OnAddDecreaseProductListener onAddDecreaseProductListener) {
        this.onAddDecreaseProductListener = onAddDecreaseProductListener;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_shopper, parent, false);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
        final CartBean.DataBean shopper = list.get(position);
        holder.txtShopperName.setText(shopper.getSellerName());

        // 产品的列表
        List<CartBean.DataBean.ListBean> list = this.list.get(position).getList();
        final ProductAdapter productAdapter = new ProductAdapter(context, list);
        holder.rvProduct.setLayoutManager(new LinearLayoutManager(context));
        // 给二级列表添加一个加减器监听
        if (onAddDecreaseProductListener != null) {
            productAdapter.setOnAddDecreaseProductListener(onAddDecreaseProductListener);
        }
        // 二级条目的复选事件
        productAdapter.setOnProductClickListener(new ProductAdapter.OnProductClickListener() {
            @Override
            public void onProductClick(int position, boolean isChecked) {
                if (!isChecked) {
                    shopper.setChecked(false);
                    if (onShopperClickListener != null) {
                        onShopperClickListener.onShopperClick(position, false);
                    }
                } else {
                    boolean isAllProductChecked = true;
                    for (CartBean.DataBean.ListBean listBean : shopper.getList()) {
                        if (!listBean.isChecked()) {
                            isAllProductChecked = false;
                            break;
                        }
                    }
                    shopper.setChecked(isAllProductChecked);
                    if (onShopperClickListener != null) {
                        onShopperClickListener.onShopperClick(position, true);
                    }
                }
                notifyDataSetChanged();
                onAddDecreaseProductListener.onChange(0, 0);
            }
        });
        holder.rvProduct.setAdapter(productAdapter);

        holder.cbShopper.setOnCheckedChangeListener(null);
        holder.cbShopper.setChecked(shopper.isChecked());
        holder.cbShopper.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                shopper.setChecked(b);

                List<CartBean.DataBean.ListBean> productList = shopper.getList();
                for (CartBean.DataBean.ListBean listBean : productList) {
                    listBean.setChecked(b);
                }
                productAdapter.notifyDataSetChanged();

                if (onShopperClickListener != null) {
                    onShopperClickListener.onShopperClick(position, b);
                }
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.cb_shopper)
        CheckBox cbShopper;
        @BindView(R.id.txt_shopper_name)
        TextView txtShopperName;
        @BindView(R.id.rv_product)
        RecyclerView rvProduct;

        ViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }
    }
}

商品Adapter:

 

public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ViewHolder> {

    private Context context;
    private List<CartBean.DataBean.ListBean> list;

    public ProductAdapter(Context context, List<CartBean.DataBean.ListBean> list) {
        this.context = context;
        this.list = list;
    }

    // 二级条目发生变化的监听
    public interface OnProductClickListener {
        void onProductClick(int position, boolean isChecked);
    }

    private OnProductClickListener onProductClickListener;

    public void setOnProductClickListener(OnProductClickListener onProductClickListener) {
        this.onProductClickListener = onProductClickListener;
    }

    // 加减器发生变化的监听
    public interface OnAddDecreaseProductListener {
        void onChange(int position, int num);
    }

    private OnAddDecreaseProductListener onAddDecreaseProductListener;

    public void setOnAddDecreaseProductListener(OnAddDecreaseProductListener onAddDecreaseProductListener) {
        this.onAddDecreaseProductListener = onAddDecreaseProductListener;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_product, parent, false);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
        // 获取商品(product)对象
        final CartBean.DataBean.ListBean product = list.get(position);

        // 配置显示内容
        String[] images = product.getImages().replace("|", ",").replace("https", "http").split(",");
        Picasso.with(context).load(images[0]).into(holder.imgLogo);
        holder.txtProductName.setText(product.getTitle());
        holder.txtProductPrice.setText("¥" + product.getPrice());
        holder.madAdv.setNum(product.getNum());

        holder.madAdv.setOnAddDecreaseClickListener(new MyAddDecreaseView.OnAddDecreaseClickListener() {
            @Override
            public void onAddClick(int num) {
                product.setNum(num);

                if (onAddDecreaseProductListener != null) {
                    onAddDecreaseProductListener.onChange(position, num);
                }
            }

            @Override
            public void onDecreaseClick(int num) {
                product.setNum(num);

                if (onAddDecreaseProductListener != null) {
                    onAddDecreaseProductListener.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 b) {
                product.setChecked(b);

                if (onProductClickListener != null) {
                    onProductClickListener.onProductClick(position, b);
                }
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.cb_product)
        CheckBox cbProduct;
        @BindView(R.id.img_logo)
        ImageView imgLogo;
        @BindView(R.id.txt_product_name)
        TextView txtProductName;
        @BindView(R.id.txt_product_price)
        TextView txtProductPrice;
        @BindView(R.id.mad_adv)
        MyAddDecreaseView madAdv;

        ViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }
    }
}

MainActivity:

public class MainActivity extends BaseActivity<CartPresenter> implements ICartView {
    @BindView(R.id.rv_carts)
    RecyclerView rvCarts;
    @BindView(R.id.cb_check_all)
    CheckBox cbCheckAll;
    @BindView(R.id.txt_total_price)
    TextView txtTotalPrice;
    @BindView(R.id.txt_edit)
    TextView txtEdit;
    private List<CartBean.DataBean> list;
    private ShopperAdapter shopperAdapter;

    @Override
    public Context getContext() {
        return this;
    }

    @Override
    public void getCarts(CartBean data) {
        list.addAll(data.getData());
        shopperAdapter.notifyDataSetChanged();
    }

    @Override
    protected void setListener() {
        super.setListener();
        cbCheckAll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                boolean isChecked = cbCheckAll.isChecked();
                for (CartBean.DataBean dataBean : list) {
                    dataBean.setChecked(isChecked);
                    List<CartBean.DataBean.ListBean> products = dataBean.getList();
                    for (CartBean.DataBean.ListBean product : products) {
                        product.setChecked(isChecked);
                    }
                }
                calculatePrice();
                shopperAdapter.notifyDataSetChanged();
            }
        });
    }

    private void calculatePrice() {
        float totalPrice = 0;
        for (CartBean.DataBean dataBean : list) {
            List<CartBean.DataBean.ListBean> products = dataBean.getList();
            for (CartBean.DataBean.ListBean product : products) {
                if (product.isChecked()) {
                    totalPrice += product.getPrice() * product.getNum();
                }
            }
        }
        txtTotalPrice.setText("合计:¥" + totalPrice);
    }

    @Override
    public void onCartFailed(Throwable t) {
        Toast.makeText(this, t.getMessage(), Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void initData() {
        presenter.getCarts();

        list = new ArrayList<>();
        shopperAdapter = new ShopperAdapter(this, list);
        shopperAdapter.setOnShopperClickListener(new ShopperAdapter.OnShopperClickListener() {
            @Override
            public void onShopperClick(int position, boolean isChecked) {
                if (!isChecked) {
                    cbCheckAll.setChecked(false);
                } else {
                    boolean isAllShopperChecked = true;
                    for (CartBean.DataBean dataBean : list) {
                        if (!dataBean.isChecked()) {
                            isAllShopperChecked = false;
                            break;
                        }
                    }
                    cbCheckAll.setChecked(isAllShopperChecked);
                }
                calculatePrice();
            }
        });
        shopperAdapter.setOnAddDecreaseProductListener(new ProductAdapter.OnAddDecreaseProductListener() {
            @Override
            public void onChange(int position, int num) {
                calculatePrice();
            }
        });
        rvCarts.setLayoutManager(new LinearLayoutManager(this));
        rvCarts.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
        rvCarts.setAdapter(shopperAdapter);
    }

    @Override
    protected CartPresenter providePresenter() {
        return new CartPresenter();
    }

    @Override
    protected int provideLayoutId() {
        return R.layout.activity_main;
    }

    @OnClick(R.id.txt_edit)
    public void onViewClicked() {
        startActivity(new Intent(this, SearchActivity.class));
    }
}

加减器:

public class MyAddDecreaseView extends LinearLayout {
    @BindView(R.id.btn_decrease)
    Button btnDecrease;
    @BindView(R.id.et_num)
    TextView etNum;
    @BindView(R.id.btn_add)
    Button btnAdd;
    private int num = 1;

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
        etNum.setText(num + "");
    }

    public interface OnAddDecreaseClickListener {
        void onAddClick(int num);

        void onDecreaseClick(int num);
    }

    private OnAddDecreaseClickListener onAddDecreaseClickListener;

    public void setOnAddDecreaseClickListener(OnAddDecreaseClickListener onAddDecreaseClickListener) {
        this.onAddDecreaseClickListener = onAddDecreaseClickListener;
    }

    public MyAddDecreaseView(Context context) {
        this(context, null);
    }

    public MyAddDecreaseView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MyAddDecreaseView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initData(context);
    }

    private void initData(Context context) {
        View.inflate(context, R.layout.widget_add_decrease, this);
        ButterKnife.bind(this);
        etNum.setText(num + "");
    }


    @OnClick({R.id.btn_decrease, R.id.btn_add})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn_decrease:
                if (num > 1) {
                    num--;
                }
                etNum.setText(num + "");
                if (onAddDecreaseClickListener != null) {
                    onAddDecreaseClickListener.onDecreaseClick(num);
                }
                break;
            case R.id.btn_add:
                num++;
                etNum.setText(num + "");
                if (onAddDecreaseClickListener != null) {
                    onAddDecreaseClickListener.onAddClick(num);
                }
                break;
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值