购物车

#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、付费专栏及课程。

余额充值