二级列表购物车的实现思路

首先先把二级列表成功实现功能

涉及到 我们的自定义view的一个实现

实现自定义view

public class MyView extends LinearLayout {
    private TextView add;
    private TextView sex;
    private EditText ed_num;
    private int num=1;

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

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

    public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    private void init(final Context context) {
        View view = LayoutInflater.from(context).inflate(R.layout.myview, this, true);
         add = view.findViewById(R.id.add);
         sex = view.findViewById(R.id.sex);
         ed_num = view.findViewById(R.id.edit_num);
         //默认为1
         ed_num.setText("1");
         //点击加号增加
         add.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
                 num++;
                 ed_num.setText(num+"");
                 if (addMinusCallback!=null){
                     addMinusCallback.numCallback(num);
                 }
             }
         });
         //点击减号减少
         sex.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
                 num--;
                 if (num==0){
                     num=1;
                     Toast.makeText(context,"不能为零!",Toast.LENGTH_LONG).show();
                 }
                 ed_num.setText(num+"");
                 if (addMinusCallback!=null){
                     addMinusCallback.numCallback(num);
                 }
             }
         });
    }

    public void setNumTv(int num){
        ed_num.setText(num+"");
    }

    public int getNum() {
        return num;
    }
    private AddMinusCallback addMinusCallback;
    public interface AddMinusCallback{
        void numCallback(int num);
    }

    public void setAddMinusCallback(AddMinusCallback addMinusCallback) {
        this.addMinusCallback = addMinusCallback;
    }
}

实现自定义view的一个功能

创建两个接口

public interface CartCallback {
    void notifyCartItem(boolean isChecked ,int postion);
    void notifyNum();
}
public interface CartUICallback {
    void notifyCart();
}

在适配器中设置父条目和子条目的一个功能实现计算价格

在父条目适配器中

implements CartCallback
private CartUICallback cartUICallback;

    public void setCartUICallback(CartUICallback cartUICallback) {
        this.cartUICallback = cartUICallback;
    }

    public List<CartBean.Cart> getCarts() {
        return carts;
    }
for (CartBean.Cart.Product product : cart.list) {
            product.pos = i;
        }

        myVh.checkbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                cart.isChecked = myVh.checkbox.isChecked();
                for (CartBean.Cart.Product product : cart.list) {
                    product.isProductChecked = cart.isChecked;
                }
                notifyDataSetChanged();
                if (cartUICallback != null) {
                    cartUICallback.notifyCart();
                }
            }
        });
@Override
    public void notifyCartItem(boolean isChecked, int postion) {
        carts.get(postion).isChecked = isChecked;
        notifyDataSetChanged();
        if (cartUICallback != null) {
            cartUICallback.notifyCart();
        }
    }

    @Override
    public void notifyNum() {
        if (cartUICallback != null) {
            cartUICallback.notifyCart();
        }
    }

    public void addData(List<CartBean.Cart> list) {
        if (list != null && carts != null) {
            carts.addAll(list);
            notifyDataSetChanged();
        }
    }

在子条目的适配器中设置

 private CartCallback cartCallback;

    public void setCartCallback(CartCallback cartCallback) {
        this.cartCallback = cartCallback;
    }

图片去除https中s的实现

String[] imgs = product.images.split("\\|");
        if (imgs != null && imgs.length > 0) {
            Glide.with(context).load(imgs[0]).into(myVh.image);
        }

自定义view实现加减价格和chebox选中

myVh.myview.setAddMinusCallback(new MyView.AddMinusCallback() {
            @Override
            public void numCallback(int num) {
                product.productNum=num;
                if (cartCallback!=null){
                    cartCallback.notifyNum();
                }
            }
        });
        myVh.checkbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!myVh.checkbox.isChecked()){
                    product.isProductChecked=false;
                    if (cartCallback!=null){
                        cartCallback.notifyCartItem(false,product.pos);
                    }
                }else{
                    product.isProductChecked=true;
                    for (CartBean.Cart.Product cart : carts) {
                            if (!cart.isProductChecked){
                                if (cartCallback!=null){
                                    cartCallback.notifyCartItem(false,product.pos);
                                }
                                break;
                            }
                            if (cartCallback!=null){
                                cartCallback.notifyCartItem(true,product.pos);
                            }
                        }
                }
            }
        });

其次就在我们的main方法中实现

implements CartContract.IView,CartUICallback,XRecyclerView.LoadingListener
xrv.setLoadingListener(this);
         xrv.setLoadingMoreEnabled(true);

设置上拉加载和下拉刷新

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked){
                    for (CartBean.Cart cart : carts) {
                        cart.isChecked=true;
                        for (CartBean.Cart.Product product : cart.list) {
                            product.isProductChecked=true;
                        }
                    }
                }else{
                    for (CartBean.Cart cart : carts) {
                        cart.isChecked=false;
                        for (CartBean.Cart.Product product : cart.list) {
                            product.isProductChecked=false;
                        }
                    }
                }

                adapter1.notifyDataSetChanged();
                getTotalprice();
            }
        });

父条目勾选子条目的状态

private void getTotalprice() {
        double totalprice=0;
        for (CartBean.Cart cart : adapter1.getCarts()) {
            for (CartBean.Cart.Product product : cart.list) {
                if (product.isProductChecked){
                    totalprice+=product.price*product.productNum;
                }
            }
        }
        checkBox.setText("¥:"+totalprice);
    }

计算价格的方法

@Override
    public void notifyCart() {
        getTotalprice();
    }
在成功的方法中
if (list!=null){
            carts=list;
            for (CartBean.Cart cart : carts) {
                for (CartBean.Cart.Product product : cart.list) {
                    product.productNum=1;
                }
            }
            if (page==1){
                xrv.refreshComplete();
                adapter1=new Adapter1(this,carts);
                adapter1.setCartUICallback(this);
                xrv.setAdapter(adapter1);
            }else{
                if (adapter1==null){
                    adapter1=new Adapter1(this,carts);
                    adapter1.setCartUICallback(this);
                    xrv.setAdapter(adapter1);
                }else{
                    adapter1.addData(list);
                }
                xrv.loadMoreComplete();
            }
        }

定义一个int page;

@Override
    public void onRefresh() {
        page=1;
        requstData();
    }

    @Override
    public void onLoadMore() {
        page++;
        requstData();
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值