购物车

#activity

public class CartFragment extends Fragment implements CartContract.ICartView,CartCallback {
    private XRecyclerView xrc;
    private CheckBox checkbox;
    private List<CartBean.DataBean> cart;
    private CartAdapter cartAdapter;
    private TextView tv_price;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.cartfragment,container,false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ButterKnife.bind(this,view);
        xrc = view.findViewById(R.id.xrc);
        tv_price = view.findViewById(R.id.tv_price);
        checkbox = view.findViewById(R.id.checkbox);
        cart = new ArrayList<>();
        checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    for (CartBean.DataBean dataBean : cart) {
                        dataBean.isChecked = true;
                        for (CartBean.DataBean.Product product : dataBean.list) {
                            product.isProductChecked = true;
                        }
                    }
                }else {
                    for (CartBean.DataBean dataBean : cart) {
                        dataBean.isChecked = false;
                        for (CartBean.DataBean.Product product : dataBean.list) {
                            product.isProductChecked = false;
                        }
                    }
                }
                cartAdapter.notifyDataSetChanged();
                getTotalprice();
            }
        });
        initData();
    }

    private void initData() {
        CartPersenter cartPersenter = new CartPersenter(this);
        HashMap<String, String> map = new HashMap<>();
        map.put("uid","71");
        cartPersenter.getList(map);
    }

    @Override
    public void onFail(String msg) {

    }

    @Override
    public void onSuccess(List<CartBean.DataBean> list) {
        cart = list;
        xrc.setLayoutManager(new LinearLayoutManager(getActivity()));
        cartAdapter = new CartAdapter(getActivity(),cart);
        cartAdapter.setCartCallback(this);
        xrc.setAdapter(cartAdapter);
    }


    public void getTotalprice(){
        double totalprice = 0;
        for (CartBean.DataBean dataBean : cart) {
            for (CartBean.DataBean.Product product : dataBean.list) {
                if (product.isProductChecked){
                    totalprice+=product.price*product.productNum;
                }
            }
        }
        tv_price.setText("¥:"+totalprice);

    }


    @Override
    public void notifyUIcart() {
        getTotalprice();
    }
}

#契约类

public interface CartContract {
    public abstract class ICartPersenter{
        public abstract void getList(HashMap<String,String> map);

    }
    interface ICartModel{
        void getList(HashMap<String, String> map, RequestCallback requestCallback);

    }
    interface ICartView{

        void onFail(String msg);
        void onSuccess(List<CartBean.DataBean> list);

    }
}

#p

public class CartPersenter extends CartContract.ICartPersenter {
    private CartModel cartModel;
    private CartContract.ICartView iCartView;

    public CartPersenter(CartContract.ICartView iCartView) {
        this.cartModel = new CartModel();
        this.iCartView = iCartView;
    }


    @Override
    public void getList(HashMap<String, String> map) {
        if (cartModel!=null){
            cartModel.getList(map, new RequestCallback() {
                @Override
                public void onFailreq(String msg) {
                    if (iCartView!=null){
                        iCartView.onFail(msg);
                    }
                }

                @Override
                public void onSuccessreq(String result) {
                    CartBean cartBean = new Gson().fromJson(result, CartBean.class);
                    List<CartBean.DataBean> data = cartBean.data;
                    if (iCartView!=null){
                        iCartView.onSuccess(data);
                    }
                }
            });
        }
    }
}

#一级adapter

public class CartAdapter extends XRecyclerView.Adapter<CartAdapter.ViewHolder> implements CartItemCallback {
    private Context context;
    private List<CartBean.DataBean> list;

    public CartAdapter(Context context, List<CartBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }
private CartCallback cartCallback;

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

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.cart_layout, viewGroup, false);
        ViewHolder viewHolder = new ViewHolder(inflate);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
        final CartBean.DataBean dataBean = list.get(i);
        for (CartBean.DataBean.Product product : dataBean.list) {
            product.pos = i;
        }
        viewHolder.checkbox.setChecked(dataBean.isChecked);
        viewHolder.re.setLayoutManager(new LinearLayoutManager(context));
        final CartItemAdapter cartItemAdapter = new CartItemAdapter(context,list.get(i).list);
        cartItemAdapter.setCartItemCallback(this);
        viewHolder.re.setAdapter(cartItemAdapter);
        viewHolder.checkbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               dataBean.isChecked = viewHolder.checkbox.isChecked();
                for (CartBean.DataBean.Product product : dataBean.list) {
                    product.isProductChecked = dataBean.isChecked;
                }
                notifyDataSetChanged();
                if (cartCallback!=null){
                    cartCallback.notifyUIcart();
                }
            }
        });
    }

    @Override
    public int getItemCount() {
        return list==null?0:list.size();
    }

    @Override
    public void notifyItem(boolean isChecked, int postion) {
        list.get(postion).isChecked = isChecked;
        notifyDataSetChanged();
        if (cartCallback!=null){
            cartCallback.notifyUIcart();
        }
    }

    @Override
    public void notifyNum() {
        if (cartCallback!=null){
            cartCallback.notifyUIcart();
        }
    }

    class ViewHolder extends RecyclerView.ViewHolder{
        CheckBox checkbox;

        RecyclerView re;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            checkbox = itemView.findViewById(R.id.checkbox);
            re = itemView.findViewById(R.id.re);

        }
    }
}

#二级adapter

public class CartItemAdapter extends XRecyclerView.Adapter<CartItemAdapter.ViewHolder> {
    private Context context;
    private List<CartBean.DataBean.Product> list;

    public CartItemAdapter(Context context, List<CartBean.DataBean.Product> list) {
        this.context = context;
        this.list = list;
    }
    private CartItemCallback cartItemCallback;

    public void setCartItemCallback(CartItemCallback cartItemCallback) {
        this.cartItemCallback = cartItemCallback;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.cart_item, viewGroup, false);
        ViewHolder viewHolder = new ViewHolder(inflate);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
        final CartBean.DataBean.Product product = list.get(i);
        viewHolder.cb_box.setChecked(product.isProductChecked);
        viewHolder.tv_name.setText(product.title);
        viewHolder.tv_price.setText(product.price+"");
        String[] split = product.images.split("\\|");

        Glide.with(context).load(split[0]).into(viewHolder.iv_img);
        viewHolder.addmus.setAddMusCallback(new AddmusView.AddMusCallback() {
            @Override
            public void getNum(int num) {
                product.productNum = num;
                if (cartItemCallback!=null){
                    cartItemCallback.notifyNum();
                }
            }
        });
        viewHolder.cb_box.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               if (!viewHolder.cb_box.isChecked()){
                   product.isProductChecked=false;
                   if (cartItemCallback!=null){
                       cartItemCallback.notifyItem(false,product.pos);
                   }
               }else {
                   product.isProductChecked = true;
                   cartItemCallback.notifyNum();
                   for (CartBean.DataBean.Product product : list) {
                       if (!viewHolder.cb_box.isChecked()){
                           product.isProductChecked=false;
                           if (cartItemCallback!=null){
                               cartItemCallback.notifyItem(false,product.pos);
                           }
                           return;
                       }
                   }
                   boolean temp=true;
                   for (CartBean.DataBean.Product product : list) {
                       if (!product.isProductChecked){
                           temp = false;
                       }
                   }
                   if (temp){
                       if (cartItemCallback!=null){
                           cartItemCallback.notifyItem(true,product.pos);
                       }
                   }



               }
            }
        });
    }

    @Override
    public int getItemCount() {
        return list==null?0:list.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder{
        TextView tv_name,tv_price;
        ImageView iv_img;
        CheckBox cb_box;
        AddmusView addmus;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            iv_img = itemView.findViewById(R.id.iv_img);
            tv_name = itemView.findViewById(R.id.tv_name);

            tv_price = itemView.findViewById(R.id.tv_price);
            cb_box = itemView.findViewById(R.id.cb_box);
            addmus = itemView.findViewById(R.id.addmus);
        }
    }
}

#一级Callback

public interface CartCallback {
    void notifyUIcart();

}

#二级Callback

public interface CartItemCallback {
    void notifyItem(boolean isChecked,int postion);
    void notifyNum();
}

#加减自定义view

public class AddmusView extends LinearLayout {
    private TextView jian,add;
    private EditText ed_num;
    private int num = 1;
    public AddmusView(Context context) {
        this(context,null);
    }

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

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

    private void init(final Context context) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.add_mus, this, true);
        add = inflate.findViewById(R.id.add);
        jian = inflate.findViewById(R.id.jian);
        ed_num = inflate.findViewById(R.id.ed_num);
        ed_num.setText("1");
        jian.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                num--;
                if (num==0){
                    num=1;
                    Toast.makeText(context,"不能再减了",Toast.LENGTH_SHORT).show();
                }
                ed_num.setText(num+"");
                if (addMusCallback!=null){
                    addMusCallback.getNum(num);
                }
            }
        });
        add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                num++;
                ed_num.setText(num+"");
                if (addMusCallback!=null){
                    addMusCallback.getNum(num);
                }
            }
        });
    }
    private AddMusCallback addMusCallback;

    public void setAddMusCallback(AddMusCallback addMusCallback) {
        this.addMusCallback = addMusCallback;
    }

    public interface AddMusCallback {
        void getNum(int num);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值