二级购物车


import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.TextView;

import java.util.List;

import de.greenrobot.event.EventBus;
import test.bwie.com.goshopping.widget.MyAddDelView;

/**
 * Created by dy on 2017/10/24.
 */

public class MyAdapter extends BaseExpandableListAdapter {
    private Context context;
    private List<GroupBean> grouplist;
    private List<List<ChildBean>> childlist;
    private int num;

    public MyAdapter(Context context, List<GroupBean> grouplist, List<List<ChildBean>> childlist) {
        this.context = context;
        this.grouplist = grouplist;
        this.childlist = childlist;
    }

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

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

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

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return childlist.get(groupPosition).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(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        GroupViewHolder holder;
        View view;
        if (convertView == null) {
            holder = new GroupViewHolder();
            view = View.inflate(context, R.layout.head, null);
            holder.head_check = view.findViewById(R.id.head_check);
            holder.head_crad_name = view.findViewById(R.id.head_crad_name);
            view.setTag(holder);
        } else {
            view = convertView;
            holder = (GroupViewHolder) view.getTag();
        }
        GroupBean groupBean = grouplist.get(groupPosition);
        holder.head_check.setChecked(groupBean.isBool());
        holder.head_crad_name.setText(groupBean.getSup());
        holder.head_check.setOnClickListener(new GroupCbOnClickListener(groupPosition));
        return view;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, final ViewGroup parent) {
        final ChildViewHolder holder;
        View view;
        if (convertView == null) {
            holder = new ChildViewHolder();
            view = View.inflate(context, R.layout.fragment3_card, null);
            holder.fragment3_check = view.findViewById(R.id.fragment3_check);
            holder.fragment3_crad_name = view.findViewById(R.id.fragment3_crad_name);
            holder.fragment3_crad_price = view.findViewById(R.id.fragment3_crad_price);
            holder.myadd = view.findViewById(R.id.myadd);
            view.setTag(holder);
        } else {
            view = convertView;
            holder = (ChildViewHolder) view.getTag();
        }
        final ChildBean childBean = childlist.get(groupPosition).get(childPosition);
        holder.fragment3_check.setChecked(childBean.isChildcheck());
        holder.fragment3_crad_name.setText(childBean.getGoosname());
        holder.fragment3_crad_price.setText(childBean.getPrice() + "");
        holder.fragment3_check.setOnClickListener(new ChildCbOnClickListener(groupPosition, childPosition, holder.myadd));
        holder.myadd.setOnItemClick(new MyAddDelView.OnItemClick() {

            private int count1;

            @Override
            public void onItemAddClick(int count) {
                childlist.get(groupPosition).get(childPosition).setChildcheck(true);
                List<ChildBean> childBeens = childlist.get(groupPosition);
                if (isChildChecked(childBeens)) {
                    grouplist.get(groupPosition).setBool(true);
                    MessageEvent msg = new MessageEvent();
                    msg.setFlag(isGroupChecked());
                    EventBus.getDefault().post(msg);
                    notifyDataSetChanged();
                } else {
                    grouplist.get(groupPosition).setBool(false);
                    MessageEvent msg = new MessageEvent();
                    msg.setFlag(false);
                    EventBus.getDefault().post(msg);
                    notifyDataSetChanged();
                }

                count1 = holder.myadd.getCount();
                NumEvent numEvent = new NumEvent();
                numEvent.setAllNum(totalCount());
                numEvent.setNum(1);
                EventBus.getDefault().post(numEvent);
                childlist.get(groupPosition).get(childPosition).setCount(holder.myadd.getCount());
                notifyDataSetChanged();
                abc();
            }

            @Override
            public void onItemDelClick(int count) {
                int count2 = holder.myadd.getCount();
                NumEvent numEvent = new NumEvent();
                numEvent.setAllNum(totalCount());
                numEvent.setNum(-1);
                childlist.get(groupPosition).get(childPosition).setCount(holder.myadd.getCount());
                EventBus.getDefault().post(numEvent);
                abc();
            }
        });
        return view;
    }

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

    class GroupViewHolder {
        CheckBox head_check;
        TextView head_crad_name;
    }

    class ChildViewHolder {
        CheckBox fragment3_check;
        TextView fragment3_crad_name;
        TextView fragment3_crad_price;
        MyAddDelView myadd;
    }

    class GroupCbOnClickListener implements View.OnClickListener {
        private int groupPostion;

        public GroupCbOnClickListener(int groupPostion) {
            this.groupPostion = groupPostion;
        }

        @Override
        public void onClick(View v) {
            int a = 0;
            if (v instanceof CheckBox) {

                CheckBox cb = (CheckBox) v;
                //取消选中的时候,重置数据
                List<ChildBean> childBeen = childlist.get(groupPostion);

                    //查询该商家一共几件商品,然后传个负数到Activity
                   /*  if (!cb.isChecked()) {
                   for (ChildBean childBean : childBeen) {
                        int count = childBean.getCount();
                        a += count;
                        *//*NumEvent num = new NumEvent();
                        int b=count*childBean.getPrice();
                        Log.i("TAG","group"+b+"ccccc");
                        num.setMoney(-b);
                        EventBus.getDefault().post(num);*//*
                    }
                    NumEvent numEvent = new NumEvent();
                    numEvent.setNum(-a);
                    EventBus.getDefault().post(numEvent);
                    notifyDataSetChanged();
                     }*/
                /*else {
                    for (ChildBean childBean : childBeen) {
                        int count = childBean.getCount();
                        int b=count*childBean.getPrice();
                        Log.i("TAG","groupfalse"+b+"dddd");
                        NumEvent numEvent = new NumEvent();
                        numEvent.setMoney(b);
                        EventBus.getDefault().post(numEvent);
                    }
                    notifyDataSetChanged();
                }*/

                if(!cb.isChecked()){
                    abc();
                    notifyDataSetChanged();
                }
                grouplist.get(groupPostion).setBool(cb.isChecked());
                List<ChildBean> childBeanList = childlist.get(groupPostion);
                for (ChildBean childBean : childBeanList) {
                    childBean.setChildcheck(cb.isChecked());
                }
                MessageEvent event = new MessageEvent();
                event.setFlag(isGroupChecked());
                EventBus.getDefault().post(event);
                NumEvent numEvent = new NumEvent();
                numEvent.setAllNum(totalCount());
                EventBus.getDefault().post(numEvent);
                abc();
                notifyDataSetChanged();
            }

        }
    }

    private boolean isGroupChecked() {
        for (GroupBean groupBean : grouplist) {
            if (!groupBean.isBool()) {
                return false;
            }
        }
        return true;
    }

    class ChildCbOnClickListener implements View.OnClickListener {
        private int groupPosition;
        private int childPosition;
        private MyAddDelView myAddDelView;

        public ChildCbOnClickListener(int groupPosition, int childPosition, MyAddDelView myadd) {
            this.groupPosition = groupPosition;
            this.childPosition = childPosition;
            this.myAddDelView = myadd;
        }

        @Override
        public void onClick(View v) {
            if (v instanceof CheckBox) {

                abc();
                CheckBox cb = (CheckBox) v;
                List<ChildBean> childBeens = childlist.get(groupPosition);
                ChildBean childBean = childBeens.get(childPosition);
                childBean.setChildcheck(cb.isChecked());
                NumEvent numEvent = new NumEvent();
                numEvent.setAllNum(totalCount());
                EventBus.getDefault().post(numEvent);
                if (isChildChecked(childBeens)) {
                    grouplist.get(groupPosition).setBool(true);
                    MessageEvent msg = new MessageEvent();
                    msg.setFlag(isGroupChecked());
                    EventBus.getDefault().post(msg);
                    abc();
                    notifyDataSetChanged();
                } else {
                    // Log.i("TAG","false1111111111");
                    grouplist.get(groupPosition).setBool(false);
                    MessageEvent msg = new MessageEvent();
                    msg.setFlag(false);
                    EventBus.getDefault().post(msg);
                    abc();
                    notifyDataSetChanged();
                }
                if (!cb.isChecked()) {
                    int count = myAddDelView.getCount();
                   /* NumEvent numEvent1 = new NumEvent();
                    numEvent1.setNum(-count + 1);
                    numEvent1.setAllNum(totalCount());
                    EventBus.getDefault().post(numEvent1);*/
                    abc();
                    notifyDataSetChanged();
                }

            }
        }
    }

    private boolean isChildChecked(List<ChildBean> childBeen) {
        for (ChildBean bean : childBeen) {
            if (!bean.isChildcheck()) {
                return false;
            }
        }
        return true;
    }

    public void allChecked(boolean bool) {
        for (int i = 0; i < grouplist.size(); i++) {
            grouplist.get(i).setBool(bool);
            for (int j = 0; j < childlist.get(i).size(); j++) {
                childlist.get(i).get(j).setChildcheck(bool);
            }
        }
        NumEvent numEvent = new NumEvent();
        numEvent.setAllNum(totalCount());
        EventBus.getDefault().post(numEvent);
        abc();
        notifyDataSetChanged();
    }

    public int totalCount() {
        num = 0;
        for (int i = 0; i < grouplist.size(); i++) {
            for (int j = 0; j < childlist.get(i).size(); j++) {
                if (childlist.get(i).get(j).isChildcheck()) {
                    //遍历所有的商品,只要是选中状态的,就加1
                    num++;
                }
            }
        }
        return num;
    }

    public void abc() {
        int b = 0;
        int c=0;
        int d=0;
        for (int i = 0; i < grouplist.size(); i++) {
            for (int j = 0; j < childlist.get(i).size(); j++) {
                if (childlist.get(i).get(j).isChildcheck()) {
                    int count = childlist.get(i).get(j).getCount();
                    int price = childlist.get(i).get(j).getPrice();
                    b = count * price;
                    c+=b;
                    d+=count;
                }
            }
        }
        NumEvent numEvent = new NumEvent();
        numEvent.setMoney(c);
        numEvent.setNum(d);
        EventBus.getDefault().post(numEvent);
        notifyDataSetChanged();
    }
}



//mainActivity
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.TextView;

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

import de.greenrobot.event.EventBus;
import de.greenrobot.event.Subscribe;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private List<GroupBean> grouplist=new ArrayList<>();
    private List<ChildBean> list=null;
    private List<List<ChildBean>> childlist=new ArrayList<>();
    private ExpandableListView mExpan;
    private int sum=0;
    private int doller=0;
    private CheckBox mAllcheck;
    /**
     * 总计:
     */
    private TextView mTv;
    /**
     * 反选
     */
    private Button mFx;
    /**
     * 付款
     */
    private Button mBt;
    private MyAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EventBus.getDefault().register(this);
        initView();
        initDate();
        adapter = new MyAdapter(MainActivity.this, grouplist, childlist);
        mExpan.setAdapter(adapter);
        mExpan.setGroupIndicator(null);
        for (int i=0;i<grouplist.size();i++){
            mExpan.expandGroup(i);
        }

    }

    private void initView() {
        mExpan = (ExpandableListView) findViewById(R.id.expan);
        mAllcheck = (CheckBox) findViewById(R.id.allcheck);
        mTv = (TextView) findViewById(R.id.tv);
        mFx = (Button) findViewById(R.id.fx);
        mFx.setOnClickListener(this);
        mBt = (Button) findViewById(R.id.bt);
        mBt.setOnClickListener(this);
        mAllcheck.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                adapter.allChecked(mAllcheck.isChecked());
            }
        });
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.fx:
                break;
            case R.id.bt:

                break;
        }
    }
    public void initDate(){
        for (int i=0;i<3;i++){
            GroupBean groupBean = new GroupBean("商店" + i, false);
            grouplist.add(groupBean);
             list = new ArrayList<>();
            for (int j=0;j<2;j++){
                ChildBean childBean = new ChildBean("商品" + j, false, j + 1);
                childBean.setCount(1);
                list.add(childBean);
            }
            childlist.add(list);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
    @Subscribe
    public void messageEvent(MessageEvent msg){

        mAllcheck.setChecked(msg.isFlag());
    }
    @Subscribe
    public void NumEvent(NumEvent num){
        /*int allNum = num.getAllNum();
        Log.i("TAG","aaaaa"+allNum+"num");
        int num1 = num.getNum();
        Log.i("TAG","bbbbb"+num1+"num");
        sum+=num1;
        if(sum>=0&&allNum>=0){
            mTv.setText("总计:"+(allNum+sum)+"件");
        }else{
            allNum=0;
            sum=0;
            mTv.setText("总计:0件");
        }*/
        int num1 = num.getNum();
        Log.i("TAG",num1+"bbbb");
        mTv.setText("总计:"+num1+"件");
        int money = num.getMoney();
        mBt.setText("总价:"+money+"元");

    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值