购物车

https://www.jianshu.com/p/93515210e053

v层代码

public class Showcart extends Baseactivity implements Ishowcart{
     @BindView(R.id.bianji)
    TextView bianji;
     @BindView(R.id.edlist)
    ExpandableListView edlist;
     @BindView(R.id.heji)
     TextView heji;
     @BindView(R.id.jiesuan)
     Button jiesuan;
     @BindView(R.id.quanxuan)
    CheckBox quanxuan;
     @BindView(R.id.shanchu)
    Button shanchu;

    List<Showcartbean.DataBean> data;
    private Mypresenter mypresenter;
    private Showcartadapter showcartadapter;
    boolean flog=true;
    @Override
    int getContentView() {
        return R.layout.activity_showcart;
    }

    @Override
    void initdata() {
        mypresenter = new Mypresenter();
        mypresenter.showcart(this,new Mymode(),this);
        shanchu.setVisibility(View.GONE);
    }

    @Override
    void btonclick() {
        //全选的点击事件
        quanxuan.setOnClickListener(this);
        //编辑的点击事件
        bianji.setOnClickListener(this);
        //删除的点击事件
        shanchu.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
   switch (v.getId()) {
       //全选的逻辑
         case R.id.quanxuan:
                for (int i = 0; i <data.size() ; i++) {
                    data.get(i).setPrenterflog(!data.get(i).isPrenterflog());
                    List<Showcartbean.Mybean> list = data.get(i).getList();
                    for (int j = 0; j <list.size() ; j++) {
                        list.get(j).setChildflog(!list.get(j).isChildflog());
                    }
                }
                mypresenter.jisuan(this,new Mymode(),data);
                showcartadapter.notifyDataSetChanged();
                break;
                //编辑的逻辑
        case R.id.bianji:
            if (flog){
                shanchu.setVisibility(View.VISIBLE);
                heji.setVisibility(View.GONE);
                jiesuan.setVisibility(View.GONE);
                bianji.setText("完成");
                flog=false;
            }else {
                jiesuan.setVisibility(View.VISIBLE);
                heji.setVisibility(View.VISIBLE);
                shanchu.setVisibility(View.GONE);
                bianji.setText("编辑");
                flog=true;
            }
            break;
            //删除的逻辑
        case R.id.shanchu:

            for (int i = 0; i <data.size() ; i++) {
                List<Showcartbean.Mybean> list = data.get(i).getList();

                for (int j = 0; j <list.size() ; j++) {

                    if (list.get(j).isChildflog()){
                        list.remove(j);
                    }
                    if (list.size()==0){
                        data.remove(i);
                    }
                }
            }
            //调用p层里面计算的方法
            mypresenter.jisuan(this,new Mymode(),data);
            //刷新适配器
            showcartadapter.notifyDataSetChanged();

            break;

         }
    }


    @Override
    public void setmyadapter(Context context, List<Showcartbean.DataBean> data) {
        this.data=data;
        //设置适配器
        showcartadapter = new Showcartadapter(context, data,this);
        edlist.setAdapter(showcartadapter);
    }

    @Override
    public void setzongjia(double he) {
        //设置总价
        heji.setText("总价:"+he);
    }
}
 
 
p层代码
 
//购物车计算的方法   购物车v层接口   m层接口    购物车父类集合
@Override
public void jisuan(Ishowcart ishowcart, Imode imode, List<Showcartbean.DataBean> data) {
    double jisuan = imode.jisuan(data);
    ishowcart.setzongjia(jisuan);
}
 
//m层代码
 
//购物车计算总价的方法
@Override
public double jisuan(List<Showcartbean.DataBean> data) {
    double he=0;
    for (int i = 0; i <data.size() ; i++) {
        List<Showcartbean.Mybean> list = data.get(i).getList();
        for (int j = 0; j <list.size(); j++) {
            if (list.get(j).isChildflog()){
                //获取价格
                double price1 = list.get(j).getPrice();
                //获取数量
                double selected = list.get(j).getSelected();
                //selected+1  必须加1
                double mul = mul(price1, selected+1);
                he= add(he, mul);

            }
        }
    }

    return he;

}

public static double add(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.add(b2).doubleValue();
}

public static double mul(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.multiply(b2).doubleValue();
}

 
//适配器的代码
 
 
public class Showcartadapter extends BaseExpandableListAdapter {
  private Context context;
  private List<Showcartbean.DataBean> data;
  private Ishowcart ishowcart;


    public Showcartadapter(Context context, List<Showcartbean.DataBean> data, Ishowcart ishowcart) {
        this.context = context;
        this.data = data;
        this.ishowcart = ishowcart;
    }

    @Override
    public int getGroupCount() {
        return data.size();
    }

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

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

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

    @Override
    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        //优化类
        Myprenterhodler myprenterhodler=null;
        if (convertView==null){
            convertView = View.inflate(context, R.layout.cart_prenter, null);
            CheckBox prenter_cb = convertView.findViewById(R.id.prenter_cb);
            TextView present_tv = convertView.findViewById(R.id.present_tv);
            myprenterhodler=new Myprenterhodler(prenter_cb,present_tv);
            convertView.setTag(myprenterhodler);
        }else {
            myprenterhodler = (Myprenterhodler) convertView.getTag();
        }
        //设置自定义属性的布尔值
        myprenterhodler.prenter_cb.setChecked(data.get(groupPosition).isPrenterflog());
        myprenterhodler.present_tv.setText(data.get(groupPosition).getSellerName());

        //父类的CheckBox点击事件
        myprenterhodler.prenter_cb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //获取父类集合的布尔值
                Showcartbean.DataBean dataBean = data.get(groupPosition);
                boolean isflog = dataBean.isPrenterflog();
                //设置父类取反
                isflog=!isflog;
                //设置父类布尔值
                dataBean.setPrenterflog(isflog);
                //获取子类集合
                List<Showcartbean.Mybean> list = dataBean.getList();
                for (int j = 0; j <list.size() ; j++) {
                    //设置子控件和父父控件相同的布尔值
                       list.get(j).setChildflog(isflog);

                       //调用p层计算的方法
                    Mypresenter mypresenter=new Mypresenter();
                    mypresenter.jisuan(ishowcart,new Mymode(),data);
                    //刷新适配器
                    notifyDataSetChanged();
                    }


            }
        });
        return convertView;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
       //子类的优化类
        Mychildhodler mychildhodler=null;
        if (convertView==null){
            convertView = View.inflate(context, R.layout.cart_child, null);
            CheckBox child_ck = convertView.findViewById(R.id.child_ck);
            SimpleDraweeView sd = convertView.findViewById(R.id.sd);
            TextView child_tv= convertView.findViewById(R.id.child_tv);
            TextView child_tv1 = convertView.findViewById(R.id.child_tv1);
            Jiajian jiajian = convertView.findViewById(R.id.jiajian);
            mychildhodler=new Mychildhodler(child_ck,sd,child_tv,child_tv1,jiajian);
            convertView.setTag(mychildhodler);
        }else {
            mychildhodler = (Mychildhodler) convertView.getTag();
        }
        //获取子类的数据
        final Showcartbean.Mybean mybean = data.get(groupPosition).getList().get(childPosition);
        mychildhodler.child_ck.setChecked(mybean.isChildflog());
        mychildhodler.child_tv.setText(mybean.getTitle());
        mychildhodler.child_tv1.setText(""+mybean.getPrice());
        String images = mybean.getImages();
        String[] split = images.split(".jpg");
        mychildhodler.sd.setImageURI(Uri.parse(split[0]+".jpg"));


        //子类的CheckBox点击事件
        mychildhodler.child_ck.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //获取子类的数据
                 Showcartbean.Mybean mybean = data.get(groupPosition).getList().get(childPosition);
                //获取自定义子控件的布尔值
                boolean isflog = mybean.isChildflog();
                //取反
                isflog=!isflog;
                //给子控件复选框赋值  目的为了记录复选框的值
                mybean.setChildflog(isflog);
                //定义标识位
                boolean flog=true;
                //当前类名调出  子控件的集合
                List<Showcartbean.Mybean> list = Showcartadapter.this.data.get(groupPosition).getList();
                //遍历子控件的集合
                for (int i = 0; i <list.size() ; i++) {
                    //如果子控件有一个的值为false时  父控件的值为false  否则不走if判断  父控件为true
                    if (!list.get(i).isChildflog()){
                        flog=false;
                    }
                }
                //设置父控件的值
                data.get(groupPosition).setPrenterflog(flog);
                //调用p层计算的方法    把购车车对象传过去  便于获取数据
                //计算的逻辑在m层做  返回一个double  在p层调用v层的方法把m层计算好的值赋值给textview
                Mypresenter mypresenter=new Mypresenter();
                mypresenter.jisuan(ishowcart,new Mymode(),data);
                //通知改变
                notifyDataSetChanged();

                notifyDataSetChanged();
            }
        });

        mychildhodler.jiajian.setNumberlistener(new Jiajian.NumberLisner() {


            @Override
            public void callBack(int couint) {
                //设置子控件的加减数量为  couint-1
                mybean.setSelected(couint-1);

                //调用p层计算的方法
                Mypresenter mypresenter=new Mypresenter();
                mypresenter.jisuan(ishowcart,new Mymode(),data);
                //刷新适配器
                notifyDataSetChanged();
            }
        });
        return convertView;
    }

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

    class Mychildhodler{
        public CheckBox child_ck;
        public SimpleDraweeView sd;
        public TextView child_tv;
        public TextView child_tv1;
        public Jiajian jiajian;

        public Mychildhodler(CheckBox child_ck, SimpleDraweeView sd, TextView child_tv, TextView child_tv1,Jiajian jiajian) {
            this.child_ck = child_ck;
            this.sd = sd;
            this.child_tv = child_tv;
            this.child_tv1 = child_tv1;
            this.jiajian=jiajian;
        }
    }

    class Myprenterhodler{
        public CheckBox prenter_cb;
        public TextView present_tv;

        public Myprenterhodler(CheckBox prenter_cb, TextView present_tv) {
            this.prenter_cb = prenter_cb;
            this.present_tv = present_tv;
        }
    }
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值