购物车

一:Activity

package com.baidu.day100.view;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.day100.R;
import com.baidu.day100.adapter.ExpandAdapter;
import com.baidu.day100.bean.CartBean;
import com.baidu.day100.presenter.CartPresenter;

import java.util.ArrayList;
import java.util.List;

public class MyCartActivity extends AppCompatActivity implements View.OnClickListener,ICartView {
    private ImageView iv_back;
    private ExpandableListView expandableListView;
    private CheckBox cart_check;
    private TextView cart_xuan;
    private TextView cart_price;
    private Button cart_xiaban;
    private CartPresenter cartPresenter;
    private ExpandAdapter expandAdapter;
    private List<CartBean.DataBean> list=new ArrayList<>();
    private boolean ischecked = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_cart);
        initView();
        setClick();
    }

    private void setClick() {
        iv_back.setOnClickListener(this);
        cart_check.setOnClickListener(this);
        cart_xiaban.setOnClickListener(this);
        //设置父条目不可点击
        expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
            @Override
            public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
                return true;//返回true,表示不可点击
            }
        });

    }

    private void initView() {
        iv_back=findViewById(R.id.cart_back);
        expandableListView=findViewById(R.id.cart_expand);
        //设置属性去掉默认向下的箭头
        expandableListView.setGroupIndicator(null);
        cart_check=findViewById(R.id.cart_check);
        cart_xuan=findViewById(R.id.cart_xuan);
        cart_price=findViewById(R.id.cart_price);
        cart_xiaban=findViewById(R.id.cart_xiaban);
        cartPresenter=new CartPresenter(this);
        cartPresenter.setDatas();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.cart_back:
                finish();
                break;
            case R.id.cart_check:
                //全选
                quanxuan();
                break;
            case R.id.cart_xiaban:

                break;
        }
    }

    private void quanxuan() {
        Toast.makeText(MyCartActivity.this,"点击了",Toast.LENGTH_SHORT).show();
        if (ischecked) {
            expandAdapter.setIsSelect(ischecked);
            ischecked = false;
            cart_check.setChecked(ischecked);
        } else {
            expandAdapter.setIsSelect(ischecked);
            ischecked = true;
            cart_check.setChecked(ischecked);
        }
    }

    @Override
    public void onSuccess(final CartBean cartBean) {
        list = cartBean.getData();
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                expandAdapter = new ExpandAdapter(MyCartActivity.this, cartBean.getData(), new ExpandAdapter.Callback() {
                    @Override
                    public void GoodCartsLitenster(int countyMoney, int countsNum) {
                        cart_price.setText("小计" + countyMoney);
                        cart_xuan.setText("已选(" + countsNum + ")");
                    }
                });
                expandableListView.setAdapter(expandAdapter);
                //设置子条目不点击展示
                int count = expandableListView.getCount();
                for (int i=0;i<count;i++){
                    expandableListView.expandGroup(i);
                }
            }
        });
    }

    @Override
    public void onError(int code) {

    }

    @Override
    protected void onDestroy() {
        cartPresenter.onDestroys();
        super.onDestroy();
    }
}

 

二:adapter

 

package com.baidu.day100.adapter;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

import com.baidu.day100.R;
import com.baidu.day100.bean.CartBean;
import com.baidu.day100.view.SumLayout;
import com.bumptech.glide.Glide;

import java.util.List;

public class ExpandAdapter extends BaseExpandableListAdapter {
    private static final String TAG = ExpandAdapter.class.getSimpleName();
    private Context context;
    private List<CartBean.DataBean> list;
    private Callback callback;
    //选中的货物的钱数
    private int countsMoney ;
    //选中的货物的个数
    private int countsNum ;

    public void setCallback(Callback callback) {
        this.callback = callback;
    }

    public ExpandAdapter(Context context, List<CartBean.DataBean> list,Callback callback) {
        this.context = context;
        this.list = list;
        this.callback=callback;
    }
    //将所有的单选框设为全选或全不选
    public void setIsSelect(boolean ischecked) {
        for (CartBean.DataBean li : list) {
            List<CartBean.DataBean.ListBean> list1 = li.getList();
            for (CartBean.DataBean.ListBean l : list1) {
                if (ischecked) {
                    l.setSelected(0);
                } else {
                    l.setSelected(1);
            }
            }
        }
        notifyDataSetChanged();
    }
    /**
     * 统计小计 获取选中的个数
     */
    public void getcountsMoneyAndNum() {
        countsMoney = 0;
        countsNum = 0;
        if (list == null) {
            return;
        }
        for (CartBean.DataBean li : list) {
            List<CartBean.DataBean.ListBean> list1 = li.getList();
            for (CartBean.DataBean.ListBean l : list1) {
                if (l.getSelected() == 1) {
                    countsMoney += (l.getNum() * l.getBargainPrice());
                    countsNum += l.getNum();
                }
            }
        }
    }
    @Override
    public int getGroupCount() {
        return list.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return list.get(groupPosition).getList().size();
    }

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

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return list.get(groupPosition).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 true;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        GroupViewHolder groupViewHolder=null;
        if(convertView==null){
            convertView=LayoutInflater.from(context).inflate(R.layout.group_item,parent,false);
            groupViewHolder=new GroupViewHolder();
            groupViewHolder.textView=convertView.findViewById(R.id.group_title);
            convertView.setTag(groupViewHolder);
        }else{
            groupViewHolder= (GroupViewHolder) convertView.getTag();
        }
        groupViewHolder.textView.setText(list.get(groupPosition).getSellerName());
        return convertView;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        ChildViewHolder childViewHolder=null;
        if (convertView==null){
            convertView=LayoutInflater.from(context).inflate(R.layout.child_item,parent,false);
            childViewHolder=new ChildViewHolder();
            childViewHolder.checkBox=convertView.findViewById(R.id.child_box);
            childViewHolder.imageView=convertView.findViewById(R.id.child_img);
            childViewHolder.tvTitile=convertView.findViewById(R.id.child_title);
            childViewHolder.tvPrice=convertView.findViewById(R.id.child_price);
            childViewHolder.sumLayout = convertView.findViewById(R.id.cart_childe_item_sumlayout);
            convertView.setTag(childViewHolder);
        }else {
            childViewHolder= (ChildViewHolder) convertView.getTag();
        }
        List<CartBean.DataBean.ListBean> listBeans = this.list.get(groupPosition).getList();
        int selected = listBeans.get(childPosition).getSelected();
        if(selected==1){
            childViewHolder.checkBox.setChecked(true);
        }else{
            childViewHolder.checkBox.setChecked(false);
        }
        Glide.with(context).load(listBeans.get(childPosition).getImages().split("\\|")[0]).into(childViewHolder.imageView);
        childViewHolder.tvTitile.setText(listBeans.get(childPosition).getTitle());
        //因为是double类型所以要加“”,基本类中字段中有小数点都改成double类型
        childViewHolder.tvPrice.setText(listBeans.get(childPosition).getPrice()+"");

        final ChildViewHolder finalMyChildView = childViewHolder;
        /**
         * 自定义加减框控件点击事件
         */
        childViewHolder.sumLayout.setOnDownSumLayoutListener(new SumLayout.OnDownSumLayouListener() {
            @Override
            public void onDownSumLayout() {
                //得到改变后的购买数量
                String count = finalMyChildView.sumLayout.getCount();
                //转为int型
                int i = Integer.parseInt(count);
                //并重新给子条目数据的购买数量赋值
                list.get(groupPosition).getList().get(childPosition).setNum(i);
                //刷新适配器,使显示器上的值改变
                notifyDataSetChanged();

            }
        });

        childViewHolder.checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int selected = list.get(groupPosition).getList().get(childPosition).getSelected();
                if (selected == 0) {
                    list.get(groupPosition).getList().get(childPosition).setSelected(1);
                } else if (selected == 1) {
                    list.get(groupPosition).getList().get(childPosition).setSelected(0);
                }
                notifyDataSetChanged();
            }
        });
        return convertView;
    }

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

    @Override
    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
        getcountsMoneyAndNum();
        callback.GoodCartsLitenster(countsMoney,countsNum);
    }
    public class GroupViewHolder{
        TextView textView;
    }
    public class ChildViewHolder{
        CheckBox checkBox;
        ImageView imageView;
        TextView tvTitile;
        TextView tvPrice;
        SumLayout sumLayout;
    }


    public interface Callback {
        void GoodCartsLitenster(int countyMoney, int countsNum);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值