二级列表购物车Adapter

public class MyExpandAdapter extends BaseExpandableListAdapter implements View.OnClickListener {

    private ResultBean resultBean;
    private Context context;
    private UpdateView updateViewListener;

    public MyExpandAdapter(Context context) {
        this.context = context;
    }

    //设置数据
    public void setData(ResultBean rBean){
        this.resultBean=rBean;
    }

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

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

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

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return resultBean.getData().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(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        GroupViewHolder groupViewHolder;
        if(convertView==null){
            convertView= LayoutInflater.from(context).inflate(R.layout.groupview,parent,false);
            groupViewHolder=new GroupViewHolder(convertView);
            convertView.setTag(groupViewHolder);
        }else{
            groupViewHolder= (GroupViewHolder) convertView.getTag();
        }
        groupViewHolder.group_name.setText(resultBean.getData().get(groupPosition).getSellerName());
        //设置tag
        groupViewHolder.cb_group.setTag(groupPosition);
        //设置group复选框的点击事件
        groupViewHolder.cb_group.setOnClickListener(this);
        //根据获取到的复选框状态设置是否被选中
        if(resultBean.getData().get(groupPosition).getGroupSelect()){
            if(!groupViewHolder.cb_group.isChecked()){
                groupViewHolder.cb_group.setChecked(true);
            }
        }else{
            groupViewHolder.cb_group.setChecked(false);
        }
        return convertView;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        final ChildViewHolder childViewHolder;
        if(convertView==null){
            convertView=LayoutInflater.from(context).inflate(R.layout.childview,parent,false);
            childViewHolder=new ChildViewHolder(convertView);
            convertView.setTag(childViewHolder);
        }else{
            childViewHolder= (ChildViewHolder) convertView.getTag();
        }
        //设置child的tag
        String tag = groupPosition + "," + childPosition;
        childViewHolder.cb_child.setTag(tag);
        childViewHolder.child_rublish.setTag(tag);
        //设置child复选框的点击事件
        childViewHolder.child_rublish.setOnClickListener(this);
        childViewHolder.cb_child.setOnClickListener(this);
        childViewHolder.customChangeNumView.setEditText(resultBean.getData().get(groupPosition).getList().get(childPosition).getNum());
        //加减监听
        childViewHolder.customChangeNumView.setCustomListener(new CustomChangeNumView.CustomListener() {
            @Override
            public void jiajian(int count) {
                resultBean.getData().get(groupPosition).getList().get(childPosition).setNum(count);
                notifyDataSetChanged();
                sumList(resultBean);
            }
        });
        //根据获取的状态设置是否选中
        if(resultBean.getData().get(groupPosition).getList().get(childPosition).getChildSelect()){
            childViewHolder.cb_child.setChecked(true);
        }else{
            childViewHolder.cb_child.setChecked(false);
        }
//        childViewHolder.child_img.setTag(tag);
        if(resultBean.getData().get(groupPosition).getList().get(childPosition).getImages().split("\\|").length>0) {
            Glide.with(context).load(resultBean.getData().get(groupPosition).getList().get(childPosition).getImages().split("\\|")[0]).into(childViewHolder.child_img);
        }else{
            Glide.with(context).load(resultBean.getData().get(groupPosition).getList().get(childPosition).getImages()).into(childViewHolder.child_img);
        }
        childViewHolder.child_title.setText(resultBean.getData().get(groupPosition).getList().get(childPosition).getTitle()+"");
        childViewHolder.child_price.setText(resultBean.getData().get(groupPosition).getList().get(childPosition).getPrice()+"");
        return convertView;
    }

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

    //的viewholder
    class GroupViewHolder{
        SmoothCheckBox cb_group;
        TextView group_name;
        public GroupViewHolder(View itemView) {
            cb_group=itemView.findViewById(R.id.cb_group);
            group_name=itemView.findViewById(R.id.group_name);
        }
    }

    //child的viewholdergroup
    class ChildViewHolder{
        SmoothCheckBox cb_child;
        ImageView child_img;
        ImageView child_rublish;
        TextView child_title;
        TextView child_price;
        CustomChangeNumView customChangeNumView;


        public ChildViewHolder(View itemView) {
            cb_child=itemView.findViewById(R.id.cb_child);
            child_img=itemView.findViewById(R.id.child_img);
            child_title=itemView.findViewById(R.id.child_title);
            child_price=itemView.findViewById(R.id.child_price);
            child_rublish=itemView.findViewById(R.id.child_rublish);
            customChangeNumView=itemView.findViewById(R.id.custom);
        }
    }

    //点击事件
    @Override
    public void onClick(View v) {
        SmoothCheckBox checkBox;
        String tag = v.getTag().toString();
        String[] split;
        int groupId = 0;
        int childId = 0;
        int childSize = 0;
        int groupPosition = 0;

        if(tag.contains(",")){
            split = tag.split(",");
            groupId=Integer.valueOf(split[0]);
            childId=Integer.valueOf(split[1]);
        }else{
            groupPosition=Integer.valueOf(tag);
            childSize=resultBean.getData().get(groupPosition).getList().size();
        }
        switch (v.getId()){
            //组的复选框点击
            case R.id.cb_group:
                checkBox= (SmoothCheckBox) v;
                resultBean.getData().get(groupPosition).setGroupSelect(!checkBox.isChecked());
                if(!checkBox.isChecked()){
                    for (int i=0;i<childSize;i++){
                        if(!resultBean.getData().get(groupPosition).getList().get(i).getChildSelect()){
                            resultBean.getData().get(groupPosition).getList().get(i).setChildSelect(!checkBox.isChecked());
                        }
                    }
                }else{
                    for (int i=0;i<childSize;i++){
                        resultBean.getData().get(groupPosition).getList().get(i).setChildSelect(!checkBox.isChecked());
                    }
                }
                int fCount=0;
                for (int i=0;i<resultBean.getData().size();i++){
                    if(resultBean.getData().get(i).getGroupSelect()){
                        fCount++;
                    }
                }
                if(fCount==resultBean.getData().size()){
                    resultBean.setAllSelect(true);
                }else{
                    resultBean.setAllSelect(false);
                }
                sumList(resultBean);
                notifyDataSetChanged();
                break;
            case R.id.cb_child:
                checkBox= (SmoothCheckBox) v;
                int cCount=0;
                int gCount=0;
                resultBean.getData().get(groupId).getList().get(childId).setChildSelect(!checkBox.isChecked());
                for (int i=0;i<resultBean.getData().get(groupId).getList().size();i++){
                    if(resultBean.getData().get(groupId).getList().get(i).getChildSelect()){
                            cCount++;
                    }
                }
                if(cCount==resultBean.getData().get(groupId).getList().size()){
                    resultBean.getData().get(groupId).setGroupSelect(true);
                }else{
                    resultBean.getData().get(groupId).setGroupSelect(false);
                }

                for (int i=0;i<resultBean.getData().size();i++){
                    if(resultBean.getData().get(i).getGroupSelect()){
                        gCount++;
                    }
                }

                if(gCount==resultBean.getData().size()){
                    resultBean.setAllSelect(true);
                }else{
                    resultBean.setAllSelect(false);
                }
                sumList(resultBean);
                notifyDataSetChanged();
                break;
            case R.id.child_rublish:
                resultBean.getData().get(groupId).getList().remove(childId);
                if(resultBean.getData().get(groupId).getList().size()==0){
                        resultBean.getData().remove(groupId);
                }
                sumList(resultBean);
                notifyDataSetChanged();
                break;
        }
    }

    //设置updateviewlistener
    public void setUpdateViewListener(UpdateView Listener){
        if(updateViewListener==null){
            this.updateViewListener=Listener;
        }
    }

    //计算总价的
    public void sumList(ResultBean resultBean){
        int allCount=0;
        float allMoney=0;

        for (int i=0;i<resultBean.getData().size();i++){
            for(int j=0;j<resultBean.getData().get(i).getList().size();j++){
                if(resultBean.getData().get(i).getList().get(j).getChildSelect()){
                    allCount+=resultBean.getData().get(i).getList().get(j).getNum();
                    allMoney+=resultBean.getData().get(i).getList().get(j).getNum()*resultBean.getData().get(i).getList().get(j).getPrice();
                }
            }
        }
        resultBean.setAllCount(allCount);
        resultBean.setAllMoney(allMoney);
        updateViewListener.update(resultBean.getAllSelect(),allCount,allMoney);
    }

    //全选
    public void selectAll(boolean checked){
        resultBean.setAllSelect(checked);
        for (int i=0;i<resultBean.getData().size();i++){
            resultBean.getData().get(i).setGroupSelect(checked);
            for (int j=0;j<resultBean.getData().get(i).getList().size();j++){
                resultBean.getData().get(i).getList().get(j).setChildSelect(checked);
            }
        }
        notifyDataSetChanged();
        sumList(resultBean);
    }

猜你喜欢

转载自blog.csdn.net/owen_bland/article/details/80186075