Android实现购物车逻辑

//1.先创建eventbusevent包;2.创建MessageEvent类;3.创建PriceAndCountEvent类,用来存储价格和数量
public class MessageEvent {
    private boolean checked;
    public boolean isChecked(){
        return checked;
    };
    public void setChecked(boolean checked){
        this.checked = checked;
    }
}
 
   
public class PriceAndCountEvent {
    private int price;
    private int count;

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }
}
 
   
 
   
//购物车页面
public class Fragment4 extends Fragment implements IFragment4 {
    private View view;
    private ExpandableListView mElv;
    private CheckBox mCb1;
    private TextView mPrice;
    Fragment4Adapter adapter;
    /**
     * 去结算
     */
    private TextView mJiesuan;
    int count;
    int price;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment4, null);
        initView(view);
        new Fragment4Presenter(this).getGoods();
        EventBus.getDefault().register(this);
        return view;
    }

    private void initView(View view) {
        mElv = (ExpandableListView) view.findViewById(R.id.elv);
        mCb1 = (CheckBox) view.findViewById(R.id.cb1);
        mPrice = (TextView) view.findViewById(R.id.price);
        mJiesuan = (TextView) view.findViewById(R.id.jiesuan);
        mCb1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                adapter.changeAllListCbState(mCb1.isChecked());
            }
        });
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }

    @Override
    public void showList(List groupList, List> childList) {
        adapter = new Fragment4Adapter(getActivity(), groupList, childList);
        mElv.setAdapter(adapter);
        mElv.setGroupIndicator(null);
        //默认让其全部展开
        for (int i = 0; i < groupList.size(); i++) {
            mElv.expandGroup(i);
        }
    }
    @Subscribe
    public void onMessageEvent(MessageEvent event){
        mCb1.setChecked(event.isChecked());
    }
    @Subscribe
    public void onMessageEvent(PriceAndCountEvent event) {
        mJiesuan.setText("结算(" + event.getCount() + ")");
        mPrice.setText(event.getPrice() + "");
    }
}
 
   
 
   
//二级列表适配器
public class Fragment4Adapter extends BaseExpandableListAdapter {
    private Context context;
    private List grouplist;
    private List> childlist;
    private LayoutInflater inflater;
    private IFragment4 iFragment4;

    public Fragment4Adapter(Context context, List grouplist, List> childlist) {
        this.context = context;
        this.grouplist = grouplist;
        this.childlist = childlist;
        inflater = LayoutInflater.from(context);
    }
    @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(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        final GroupViewHolder holder;
        if (convertView == null){
            holder = new GroupViewHolder();
            convertView = inflater.inflate(R.layout.item_parent,null);
            holder.cbGroup = (CheckBox) convertView.findViewById(R.id.cb_parent);
            holder.tv_number = (TextView) convertView.findViewById(R.id.tv_number);
            convertView.setTag(holder);
        } else {
            holder = (GroupViewHolder) convertView.getTag();
        }
        final GoosBean.DataBean dataBean = grouplist.get(groupPosition);
        holder.cbGroup.setChecked(dataBean.isChecked());
        holder.tv_number.setText(dataBean.getTitle());
        holder.cbGroup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dataBean.setChecked(holder.cbGroup.isChecked());
                changeChildCbState(groupPosition,holder.cbGroup.isChecked());
                EventBus.getDefault().post(computer());
                changeAllCbState(isAllGroupCbSelected());
                notifyDataSetChanged();
            }
        });
        return convertView;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        final ChildViewHolder holder;
        if (convertView == null){
            holder = new ChildViewHolder();
            convertView = inflater.inflate(R.layout.item_child,null);
            holder.cbChild = (CheckBox) convertView.findViewById(R.id.cb_child);
            holder.tv_tel = (TextView) convertView.findViewById(R.id.tv_tel);
            holder.tv_content = (TextView) convertView.findViewById(R.id.tv_content);
            holder.tv_time = (TextView) convertView.findViewById(R.id.tv_time);
            holder.tv_pri = (TextView) convertView.findViewById(R.id.tv_pri);
            holder.jian = (TextView) convertView.findViewById(R.id.jian);
            holder.num = (TextView) convertView.findViewById(R.id.num);
            holder.jia = (TextView) convertView.findViewById(R.id.jia);
            holder.del = (TextView) convertView.findViewById(R.id.del);
            convertView.setTag(holder);
        } else {
            holder = (ChildViewHolder) convertView.getTag();
        }
        final GoosBean.DataBean.DatasBean datasBean = childlist.get(groupPosition).get(childPosition);
        holder.cbChild.setChecked(datasBean.isChecked());
        holder.tv_tel.setText(datasBean.getType_name());
        holder.tv_content.setText(datasBean.getMsg());
        holder.tv_time.setText(datasBean.getAdd_time());
        holder.tv_pri.setText(datasBean.getPrice()+"");
        //给二级CheckBox设置点击事件
        holder.cbChild.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //设置该条目对象里面的CheckBox属性值
                datasBean.setChecked(holder.cbChild.isChecked());
                EventBus.getDefault().post(computer());
                if (holder.cbChild.isChecked()){
                    //当前CheckBox是选中状态
                    if (isAllChildCbSelected(groupPosition)){
                        changeGroupCbState(groupPosition,true);
                        changeAllCbState(isAllGroupCbSelected());
                    }
                } else {
                    //取消选中
                    changeGroupCbState(groupPosition,false);
                    changeAllCbState(isAllGroupCbSelected());
                }
                notifyDataSetChanged();
            }
        });
        //加号-数量加
        holder.jia.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int num = datasBean.getNum();
                holder.num.setText(++num+"");
                datasBean.setNum(num);
                if (holder.cbChild.isChecked()){
                    EventBus.getDefault().post(computer());
                }
            }
        });
        //减号-数量减
        holder.jian.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int num = datasBean.getNum();
                if (num==1){
                    return;
                }
                holder.num.setText(--num+"");
                datasBean.setNum(num);
                if (holder.cbChild.isChecked()){
                    EventBus.getDefault().post(computer());
                }
            }
        });
        //删除商品
        holder.del.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                List datasBeen = childlist.get(groupPosition);
                GoosBean.DataBean.DatasBean remove = datasBeen.remove(childPosition);
                if (datasBeen.size() == 0){
                    childlist.remove(groupPosition);
                    grouplist.remove(groupPosition);
                }
                EventBus.getDefault().post(computer());
                notifyDataSetChanged();
            }
        });
        return convertView;
    }

    class GroupViewHolder{
        CheckBox cbGroup;
        TextView tv_number;
    }

    class ChildViewHolder {
        CheckBox cbChild;
        TextView tv_tel;
        TextView tv_content;
        TextView tv_time;
        TextView tv_pri;
        TextView jian;
        TextView num;
        TextView jia;
        TextView del;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
    //改变全选CheckBox状态
    private void changeAllCbState(boolean flag){
        MessageEvent messageEvent = new MessageEvent();
        messageEvent.setChecked(flag);
        EventBus.getDefault().post(messageEvent);
    }
    //改变二级列表CheckBox状态
    private void changeChildCbState(int groupPosition,boolean flag){
        List datasBeen = childlist.get(groupPosition);
        for (int i = 0; i < datasBeen.size(); i++) {
            GoosBean.DataBean.DatasBean datasBean = datasBeen.get(i);
            datasBean.setChecked(flag);
        }
    }
    //改变一级列表CheckBox状态
    private void changeGroupCbState(int groupPosition,boolean flag){
        GoosBean.DataBean dataBean = grouplist.get(groupPosition);
        dataBean.setChecked(flag);
    }
    //判断一级列表是否全部选中
    public boolean isAllGroupCbSelected(){
        for (int i = 0; i < grouplist.size(); i++) {
            GoosBean.DataBean dataBean = grouplist.get(i);
            if (!dataBean.isChecked()){
                return false;
            }
        }
        return true;
    }
    //判断二级列表是否全部选中
    public boolean isAllChildCbSelected(int groupPosition){
        List datasBeen = childlist.get(groupPosition);
        for (int i = 0; i < datasBeen.size(); i++) {
            GoosBean.DataBean.DatasBean datasBean = datasBeen.get(i);
            if (!datasBean.isChecked()){
                return false;
            }
        }
        return true;
    }
    //计算列表中选中的钱和数量
    private PriceAndCountEvent computer(){
        int count = 0;
        int price = 0;
        for (int i = 0; i < childlist.size(); i++) {
            List datasBeen = childlist.get(i);
            for (int j = 0; j < datasBeen.size(); j++) {
                GoosBean.DataBean.DatasBean datasBean = datasBeen.get(j);
                if (datasBean.isChecked()){
                    count+=datasBean.getNum();
                    price+=datasBean.getNum()*datasBean.getPrice();
                }
            }
        }
        PriceAndCountEvent priceAndCountEvent = new PriceAndCountEvent();
        priceAndCountEvent.setCount(count);
        priceAndCountEvent.setPrice(price);
        return priceAndCountEvent;
    }
    //设置全选、反选
    public void changeAllListCbState(boolean flag){
        for (int i = 0; i < grouplist.size(); i++) {
            changeGroupCbState(i,flag);
            changeChildCbState(i,flag);
        }
        EventBus.getDefault().post(computer());
        notifyDataSetChanged();
    }
}
//数据接口
public static final String url = "http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=evaluation";

你可能感兴趣的:(Android实现购物车逻辑)