简单购物车

本文介绍了一个基于Android平台的购物车功能实现方案,包括商品选择、数量调整及总价计算等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Adater

public class MyAdater extends BaseExpandableListAdapter{

    private List<ShoppCarBean.DataBean> data;
    private Context context;
    private ModifyGoodsItemNumberListener modifyGoodsItemNumberListener;
    private CheckGroupItemListener checkGroupItemListener;
    private CheckBox ck_group_choosed;
    private CheckBox ck_child_choosed;
    private ImageView iv_show_pic;
    private TextView tv_commodity_name;
    private TextView tv_commodity_attr;
    private TextView tv_commodity_price;
    private TextView tv_commodity_num;
    private TextView iv_sub;
    private TextView tv_commodity_show_num;
    private TextView iv_add;
    private Button btn_commodity_delete;

    public void setCheckGroupItemListener(CheckGroupItemListener checkGroupItemListener) {
        this.checkGroupItemListener = checkGroupItemListener;
    }

    public void setModifyGoodsItemNumberListener(ModifyGoodsItemNumberListener modifyGoodsItemNumberListener) {
        this.modifyGoodsItemNumberListener = modifyGoodsItemNumberListener;
    }
    public MyAdater(Context context) {
        this.context = context;
    }
    public void setData(List<ShoppCarBean.DataBean> data) {
        this.data = data;
    }

    @Override
    public int getGroupCount() {
        return data!=null?data.size():0;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return data!=null?data.get(groupPosition).getList().size():0;
    }

    @Override
    public Object getGroup(int groupPosition) {
        return data.get(groupPosition);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return data.get(childPosition).getList().get(childPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        if(convertView == null){

            convertView = LayoutInflater.from(context).inflate(R.layout.erji,parent,false);
        }
        ck_group_choosed = (CheckBox) convertView.findViewById(R.id.ck_group_choosed);
        if(data.get(groupPosition).isGroupChoosed()){
            ck_group_choosed.setChecked(true);
        }else{
            ck_group_choosed.setChecked(false);
        }
        ck_group_choosed.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                checkGroupItemListener.checkGroupItem(groupPosition,((CheckBox)view).isChecked());

            }
        });
        ck_group_choosed.setText(data.get(groupPosition).getSellerName());
        return convertView;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        if(convertView == null){
            convertView = LayoutInflater.from(context).inflate(R.layout.zhong,parent,false);
        }
        ck_child_choosed = (CheckBox) convertView.findViewById(R.id.ck_child_choose);
        //商品图片
        iv_show_pic = (ImageView) convertView.findViewById(R.id.iv_show_pic);
        //商品主标题
        tv_commodity_name = (TextView) convertView.findViewById(R.id.tv_commodity_name);
        //商品副标题
        tv_commodity_attr = (TextView) convertView.findViewById(R.id.tv_commodity_attr);
        //商品价格
        tv_commodity_price = (TextView) convertView.findViewById(R.id.tv_commodity_price);
        //商品数量
        tv_commodity_num = (TextView) convertView.findViewById(R.id.tv_commodity_num);
        //商品减
        iv_sub = (TextView) convertView.findViewById(R.id.iv_sub);
        //商品加减中的数量变化
        tv_commodity_show_num = (TextView) convertView.findViewById(R.id.tv_commodity_show_num);
        //商品加
        iv_add = (TextView) convertView.findViewById(R.id.iv_add);
        //删除按钮
        btn_commodity_delete = (Button) convertView.findViewById(R.id.btn_commodity_delete);
        tv_commodity_name.setText(data.get(groupPosition).getList().get(childPosition).getTitle());
        tv_commodity_attr.setText(data.get(groupPosition).getList().get(childPosition).getSubhead());
        tv_commodity_price.setText(""+data.get(groupPosition).getList().get(childPosition).getPrice());
        tv_commodity_num.setText("x"+data.get(groupPosition).getList().get(childPosition).getNum());
        tv_commodity_show_num.setText(data.get(groupPosition).getList().get(childPosition).getNum()+"");
        String images = data.get(groupPosition).getList().get(childPosition).getImages();

        String[] urls = images.split("\\|");

        Glide.with(context)
                .load(urls[0])
                .crossFade()
                .into(iv_show_pic);
         iv_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                modifyGoodsItemNumberListener.doIncrease(groupPosition,childPosition,tv_commodity_show_num);
            }
        });
        iv_sub.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                modifyGoodsItemNumberListener.doDecrease(groupPosition,childPosition,tv_commodity_show_num);

            }
        });
        ck_child_choosed.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //isChecked false  true
                checkGroupItemListener.checkChildItem(groupPosition,childPosition,((CheckBox)view).isChecked());
            }
        });
        if(data.get(groupPosition).getList().get(childPosition).isChildChoosed()){
            ck_child_choosed.setChecked(true);
        }else{
            ck_child_choosed.setChecked(false);
        }

        return convertView;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return false;
    }

    public interface CheckGroupItemListener{
        //商家的条目的复选框监听
        void checkGroupItem(int groupPosition,boolean isChecked);
        //商品的
        void checkChildItem(int groupPosition,int childPosition,boolean isChecked);


    }

    /**
     * 商品加减接口
     */
    public interface ModifyGoodsItemNumberListener{

        //商品添加操作
        void doIncrease(int groupPosition,int childPosition,View view);
        //商品减少操作
        void doDecrease(int groupPosition,int childPosition,View view);

    }
}
MainActivity
public class fragment4 extends Fragment implements IView,MyAdater.ModifyGoodsItemNumberListener,MyAdater.CheckGroupItemListener, com.example.jingdong.Me.V.IView{
    private int totalNum = 0;
    private double totalPrice= 0.00;
    private List<ShoppCarBean.DataBean> data;
    private MyShoppingPersenter myShoppingPersenter;
    private View view;
    private ExpandableListView expandList;
    private CheckBox btnCheckAll;
    private TextView tvTotalPrice;
    private TextView btnAmount;
    private TextView btnEditor;
    private MyAdater adater;
    private MychuangjianPersenter persenter;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment4, container, false);
        persenter = new MychuangjianPersenter(this);

        myShoppingPersenter = new MyShoppingPersenter(this);
        initview();

        Map<String,String> map= new HashMap<>();
        map.put("uid","4064");
        map.put("source","android");
        myShoppingPersenter.getUrl("http://120.27.23.105/product/getCarts",map);
        return view;
    }

    private void initview() {
        expandList = (ExpandableListView) view.findViewById(R.id.expandList);
        btnCheckAll = (CheckBox) view.findViewById(R.id.btnCheckAll);
        tvTotalPrice = (TextView) view.findViewById(R.id.tvTotalPrice);
        btnAmount = (TextView) view.findViewById(R.id.btnAmount);
        btnEditor = (TextView) view.findViewById(R.id.btnEditor);
        expandList.setGroupIndicator(null);
        adater = new MyAdater(getActivity());
        expandList.setAdapter(adater);
        adater.setModifyGoodsItemNumberListener(this);
        adater.setCheckGroupItemListener(this);

        btnCheckAll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                isChoosedAll(((CheckBox)view).isChecked());
                //计算商品总价
                statisticsPrice();

            }
        });
        btnAmount.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Map<String,String> list=new HashMap<>();
                list.put("uid","4064");
                list.put("price",String.valueOf(totalPrice));
                if(totalPrice!=0.00){
                    persenter.getUrl("https://www.zhaoapi.cn/product/createOrder",list);
                }else{
                    Toast.makeText(getActivity(),"请选择宝贝",Toast.LENGTH_SHORT).show();
                }


            }
        });
    }

    

    @Override
    public void checkGroupItem(int groupPosition, boolean isChecked) {
        ShoppCarBean.DataBean dataBean = data.get(groupPosition);
        dataBean.setGroupChoosed(isChecked);
        //遍历商家里面的商品,将其置为选中状态
        for (ShoppCarBean.DataBean.ListBean listBean : dataBean.getList()){
            listBean.setChildChoosed(isChecked);
        }

        //底部结算那个checkbox状态(全选)
        if(isCheckAll()){
            btnCheckAll.setChecked(true);
        }else{
            btnCheckAll.setChecked(false);
        }

        //刷新适配器
        adater.notifyDataSetChanged();

        //计算价格
        statisticsPrice();
    }

    @Override
    public void checkChildItem(int groupPosition, int childPosition, boolean isChecked) {
        ShoppCarBean.DataBean dataBean = data.get(groupPosition);//商家那一层
        List<ShoppCarBean.DataBean.ListBean> listBeans = dataBean.getList();
        ShoppCarBean.DataBean.ListBean listBean = listBeans.get(childPosition);

        //你点击商家的商品条目将其选中状态记录
        listBean.setChildChoosed(isChecked);

        //检测商家里面的每一个商品是否被选中,如果被选中,返回boolean
        boolean result = isGoodsCheckAll(groupPosition);
        if(result){
            dataBean.setGroupChoosed(result);
        }else{
            dataBean.setGroupChoosed(result);
        }

        //底部结算那个checkbox状态(全选)
        if(isCheckAll()){
            btnCheckAll.setChecked(true);
        }else{
            btnCheckAll.setChecked(false);
        }


        //刷新适配器
        adater.notifyDataSetChanged();

        //计算总价
        statisticsPrice();
    }

    @Override
    public void doIncrease(int groupPosition, int childPosition, View view) {
        ShoppCarBean.DataBean.ListBean listBean = data.get(groupPosition).getList().get(childPosition);
        //取出当前的商品数量
        int currentNum = Integer.valueOf(listBean.getNum());
        //商品++
        currentNum++;
        //将商品数量设置javabean        listBean.setNum(String.valueOf(currentNum));

        //刷新适配器
        adater.notifyDataSetChanged();


        //计算商品价格
        statisticsPrice();
    }

    @Override
    public void doDecrease(int groupPosition, int childPosition, View view) {
        ShoppCarBean.DataBean.ListBean listBean = data.get(groupPosition).getList().get(childPosition);
        //取出当前的商品数量
        int currentNum = Integer.valueOf(listBean.getNum());
        //直接结束这个方法
        if(currentNum == 1){
            return;
        }

        currentNum--;
        listBean.setNum(String.valueOf(currentNum));
        //刷新适配器
        adater.notifyDataSetChanged();

        //计算商品价格
        statisticsPrice();
    }

    @Override
    public void chenggong(ShoppCarBean shoppCarBean) {
        data = shoppCarBean.getData();
        adater.setData(data);
        adater.notifyDataSetChanged();
        defaultExpand();

    }
    private void defaultExpand() {
        for (int i = 0; i < adater.getGroupCount();++i){
            expandList.expandGroup(i);
        }
    }

    @Override
    public void shibai(ShoppCarBean shoppCarBean) {

    }
    private boolean isGoodsCheckAll(int groupPosition){
        List<ShoppCarBean.DataBean.ListBean> listBeans = this.data.get(groupPosition).getList();
        //遍历某一个商家的每个商品是否被选中
        for (ShoppCarBean.DataBean.ListBean listBean : listBeans){
            if(listBean.isChildChoosed()){//是选中状态
                continue;
            }else{
                return false;
            }

        }

        return true;
    }
    private boolean isCheckAll(){

        for (ShoppCarBean.DataBean dataBean : data){
            if(!dataBean.isGroupChoosed()){
                return false;
            }
        }
        return true;
    }
    private void isChoosedAll(boolean isChecked){

        for (ShoppCarBean.DataBean dataBean : data){
            dataBean.setGroupChoosed(isChecked);
            for (ShoppCarBean.DataBean.ListBean listBean : dataBean.getList()){
                listBean.setChildChoosed(isChecked);
            }
        }
        //刷新适配器
        adater.notifyDataSetChanged();

    }
    private void statisticsPrice(){

        //初始化值
        totalNum = 0;
        totalPrice = 0.00;

        for (ShoppCarBean.DataBean dataBean : data){

            for (ShoppCarBean.DataBean.ListBean listBean : dataBean.getList()){
                if(listBean.isChildChoosed()){
                    totalNum++;
                    System.out.println("number : "+totalNum);
                    totalPrice += Integer.valueOf(listBean.getNum())*Double.valueOf(listBean.getPrice());

                }
            }

        }

        //设置文本信息 合计、结算的商品数量
        tvTotalPrice.setText("合计:"+totalPrice);
        btnAmount.setText("结算("+totalNum+")");



    }

    @Override
    public void chenggong(ChuangjianBean chuangjianBean) {
        Toast.makeText(getActivity(),chuangjianBean.getMsg(),Toast.LENGTH_SHORT).show();

        Intent intent=new Intent(getActivity(), DingdanActivity.class);
        startActivity(intent);
    }

    @Override
    public void shibai(ChuangjianBean chuangjianBean) {

    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值