Android关于购物车一系列逻辑

实现效果如图:

 

1.通过mvp展示数据接口回调在activity中的逻辑

@Override
    public void Success(ShoppingBean shoppingBean) {
        data = shoppingBean.getData();
        data.remove(0);
        LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false);
        recyclerView.setLayoutManager(manager);
        shoppingAdapter = new ShoppingAdapter(R.layout.shopping_item, data);
        recyclerView.setAdapter(shoppingAdapter);
        checkBox_all.setOnCheckedChangeListener(null);
        checkBox_all.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (int i = 0; i < data.size(); i++) {
                    data.get(i).setOnshoppingChecked(checkBox_all.isChecked());
                    for (int j = 0; j < data.get(i).getList().size(); j++) {
                        data.get(i).getList().get(j).setGoodsChecked(checkBox_all.isChecked());
                    }
                }
                totalPrice();
                shoppingAdapter.notifyDataSetChanged();
            }
        });
        shoppingAdapter.setOnGoodsItemClickListener(new ShoppingAdapter.OnShopItemClickListener() {
            @Override
            public void onCallBack() {
                boolean result = true;
                for (int i = 0; i < data.size(); i++) {
                    result = result & data.get(i).isOnshoppingChecked();
                    for (int j = 0; j < data.get(i).getList().size(); j++) {
                        result = result & data.get(i).getList().get(j).isGoodsChecked();
                    }
                }
                checkBox_all.setChecked(result);
                totalPrice();
            }
        });
    }
    private void totalPrice() {
        double countPtice = 0;
        for (int i = 0; i < data.size(); i++) {
            for (int j = 0; j < data.get(i).getList().size(); j++) {
                if (data.get(i).getList().get(j).isGoodsChecked() == true) {
                    int number = data.get(i).getList().get(j).getDefalutNumber();
                    double price = data.get(i).getList().get(j).getPrice();
                    double count = number * price;
                    countPtice = countPtice + count;
                }
            }
        }
        price.setText("¥:" + countPtice);
    }

 2.在商家适配器中的相关逻辑

public class ShoppingAdapter extends BaseQuickAdapter<ShoppingBean.DataBean,BaseViewHolder> {

    private RecyclerView recyclerViews;
    private OnShopItemClickListener mshopItemClickListener;
    public interface OnShopItemClickListener{
        void onCallBack();
    }
    public void setOnGoodsItemClickListener(OnShopItemClickListener onShopItemClickListener){
        this.mshopItemClickListener = onShopItemClickListener;
    }

    public ShoppingAdapter(int layoutResId, @Nullable List<ShoppingBean.DataBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, final ShoppingBean.DataBean item) {
        helper.setText(R.id.textView,item.getSellerName());
        final CheckBox checkBox_shop = helper.getView(R.id.checkbox_shopping);
        recyclerViews = helper.getView(R.id.recyclerViews);
        LinearLayoutManager manager = new LinearLayoutManager(mContext,LinearLayoutManager.VERTICAL,false);
        recyclerViews.setLayoutManager(manager);
        final GoodsAdapter goodsAdapter = new GoodsAdapter(R.layout.goods_item,item.getList());
        recyclerViews.setAdapter(goodsAdapter);
        checkBox_shop.setOnCheckedChangeListener(null);
        checkBox_shop.setChecked(item.isOnshoppingChecked());
        goodsAdapter.setOnGoodsItemClickListener(new GoodsAdapter.OnGoodsItemClickListener() {
            @Override
            public void onCallBack() {
                boolean result = true;
                for (int i = 0; i < item.getList().size(); i++) {
                    result = result & item.getList().get(i).isGoodsChecked();
                }
                checkBox_shop.setChecked(result);
                goodsAdapter.notifyDataSetChanged();
                mshopItemClickListener.onCallBack();
            }
        });
        checkBox_shop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (int i = 0; i < item.getList().size(); i++) {
                    item.getList().get(i).setGoodsChecked(checkBox_shop.isChecked());
                }
                item.setOnshoppingChecked(checkBox_shop.isChecked());

                notifyDataSetChanged();
                mshopItemClickListener.onCallBack();
            }
        });

    }
}

3.在商品子条目中的一系列逻辑

public class GoodsAdapter extends BaseQuickAdapter<ShoppingBean.DataBean.ListBean,BaseViewHolder> {
    private OnGoodsItemClickListener monGoodsItemClickListener;
    public interface OnGoodsItemClickListener{
        void onCallBack();
    }
    public void setOnGoodsItemClickListener(OnGoodsItemClickListener onGoodsItemClickListener){
        this.monGoodsItemClickListener = onGoodsItemClickListener;
    }

    public GoodsAdapter(int layoutResId, @Nullable List<ShoppingBean.DataBean.ListBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, final ShoppingBean.DataBean.ListBean item) {
        helper.setText(R.id.textView_name,item.getTitle());
        helper.setText(R.id.textView_price,item.getPrice()+"");
        ImageView iv_goodsIcon = helper.getView(R.id.imageView);
        String imagesString = item.getImages();
        String[] imagesStr = imagesString.split("\\|");
        Glide.with(mContext).load(imagesStr[0]).into(iv_goodsIcon);
        final CheckBox checkBox_goods = helper.getView(R.id.checkbox_goods);
        checkBox_goods.setOnCheckedChangeListener(null);
        checkBox_goods.setChecked(item.isGoodsChecked());
        checkBox_goods.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                item.setGoodsChecked(isChecked);
                monGoodsItemClickListener.onCallBack();
            }
        });
        //加减
        Calcultor calculator = helper.getView(R.id.calcultor);

        calculator.setOnGouNumber(new Calcultor.OnGouNumber() {
            @Override
            public void jian(int number) {
                item.setDefalutNumber(number);
                monGoodsItemClickListener.onCallBack();
            }

            @Override
            public void jia(int number) {
                item.setDefalutNumber(number);
                monGoodsItemClickListener.onCallBack();
            }
        });
    }
}

4.自定义View的加减器

public class Calcultor extends LinearLayout {

    private int intnum=1;

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

    public Calcultor(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public Calcultor(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        View inflate = LayoutInflater.from(context).inflate(R.layout.calcultor, this);
        Button jia = inflate.findViewById(R.id.jia);
        Button jian = inflate.findViewById(R.id.jian);
        final EditText num = inflate.findViewById(R.id.num);
        //intnum = 1;
        jian.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                intnum = intnum-1;
                if (intnum<0){
                    intnum=0;
                    num.setText(String.valueOf(intnum));
                }
                num.setText(String.valueOf(intnum));
                onGouNumber.jian(intnum);
            }
        });
        jia.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                intnum = intnum+1;
                num.setText(String.valueOf(intnum));
                onGouNumber.jia(intnum);
            }
        });

    }
    private OnGouNumber onGouNumber;

    public void setOnGouNumber(OnGouNumber onGouNumber) {
        this.onGouNumber = onGouNumber;
    }

    public interface OnGouNumber{
        public void jian(int number);
        public void jia(int number);
    }
}

 

 

猜你喜欢

转载自blog.csdn.net/weixin_43731179/article/details/86548885