购物车适配器

本文详细介绍了一种自定义ExpandableListAdapter的实现方法,用于处理购物车中的商品数据。该适配器支持添加、清除商品列表,更新父项和子项视图,以及处理商品的选择和数量变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



public class MyExpandAdapter extends BaseExpandableListAdapter {
    private List<CartBean.DataBean> list;
    private Context context;

    public MyExpandAdapter(Context context) {
        list = new ArrayList<>();
        this.context = context;
    }

    public void add(List<CartBean.DataBean> list) {
        this.list.addAll(list);
        notifyDataSetChanged();
    }

    public void clear() {
        list.clear();
        notifyDataSetChanged();
    }

    @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;
    }

    private static final String TAG = "MyExpandAdapter";
    @Override
    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        //        View inflate = LayoutInflater.from(context).inflate(R.layout.cart_group, parent, false);
        View inflate = View.inflate(context, R.layout.cart_group, null);
        CheckBox checkBox = inflate.findViewById(R.id.grop_box);
        checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onCartListener != null) {
                    onCartListener.onGroupChecked(groupPosition);
                }
            }
        });
        checkBox.setChecked(groupIsSlected(groupPosition));

        TextView textView = inflate.findViewById(R.id.grop_title);
        textView.setText(list.get(groupPosition).getSellerName());
        return inflate;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        View inflate = View.inflate(context, R.layout.child_recycle, null);
        final List<CartBean.DataBean.ListBean> childlist = this.list.get(groupPosition).getList();
        //长按删除
        inflate.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if (onCartListener!=null){
                    onCartListener.onDelete(groupPosition,childPosition,""+childlist.get(childPosition).getPid());
                }
                return true;
            }
        });
        CheckBox checkBox = inflate.findViewById(R.id.child_recycle_box);
        checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onCartListener != null) {
                    onCartListener.onGoodChecked(groupPosition, childPosition);
                }
            }
        });
        checkBox.setChecked(childlist.get(childPosition).getSelected()==1);

        SimpleDraweeView image = inflate.findViewById(R.id.child_recycle_simple);
        TextView title = inflate.findViewById(R.id.child_recycle_textView);
        TextView price = inflate.findViewById(R.id.child_recycle_price);
        Add add = inflate.findViewById(R.id.child_add);
        //设置数量
        add.setValue(list.get(groupPosition).getList().get(childPosition).getNum());
        add.setMaxValue(100);
        add.setMaxValue(0);
        add.setButtonClick(new Add.onButtonClick() {
            @Override
            public void addClick(View view, int value) {
                Log.d(TAG, "addClick: "+value);
                if (onCartListener!=null){
                    CartBean.DataBean.ListBean listBean = list.get(groupPosition).getList().get(childPosition);
                    onCartListener.onGoodNumChange(listBean.getSellerid(),listBean.getPid(),value,listBean.getSelected()+"",groupPosition,childPosition);
                }
            }

            @Override
            public void subClick(View view, int value) {
                Log.d(TAG, "addClick: "+value);
                if (onCartListener!=null){
                    CartBean.DataBean.ListBean listBean = list.get(groupPosition).getList().get(childPosition);
                    onCartListener.onGoodNumChange(listBean.getSellerid(),listBean.getPid(),value,listBean.getSelected()+"",groupPosition,childPosition);
                }
            }
        });
        String images = childlist.get(childPosition).getImages();
        Log.d("xxx", "getChildView: "+images);
        String s= images.split("//|")[0];
        Uri parse = Uri.parse(s);
        image.setImageURI(parse);

        title.setText(childlist.get(childPosition).getTitle());
        price.setText(childlist.get(childPosition).getBargainPrice() + "");
        return inflate;
    }

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

    //判断总数
    public int getSum() {
        int sum = 0;
        for (int i = 0; i < list.size(); i++) {
            for (int j = 0; j < list.get(i).getList().size(); j++) {
                int selected = list.get(i).getList().get(j).getSelected();
                //如果没有选中 返回false
                if (selected == 1) {
                    int num = list.get(i).getList().get(j).getNum();
                    sum = sum + num;
                }
            }
        }
        return sum;
    }

    //判断总价
    public float getTotalPrice() {
        float price = 0;
        for (int i = 0; i < list.size(); i++) {
            for (int j = 0; j < list.get(i).getList().size(); j++) {
                int selected = list.get(i).getList().get(j).getSelected();
                //如果没有选中 返回false
                if (selected == 1) {
                    int num = list.get(i).getList().get(j).getNum();
                    int bargainPrice = list.get(i).getList().get(j).getBargainPrice();
                    price += (float) (num * bargainPrice);
                }
            }
        }
        return price;
    }

    //改变单个父条目是否选中
    public void setGroupSlected(int groupId, boolean check) {
        int size = list.get(groupId).getList().size();
        for (int i = 0; i < size; i++) {
            list.get(groupId).getList().get(i).setSelected(check ? 1 : 0);
        }
    }


    //改变单个子条目是否选中
    public void setGroupAndChildSlected(int groupId, int childId) {
        // TODO: 2018/8/23 ????
        List<CartBean.DataBean.ListBean> beans = this.list.get(groupId).getList();
        this.list.get(groupId).getList().get(childId).setSelected(beans.get(childId).getSelected()==0? 1 : 0);
    }

    //改变数量
    public void setNumber1(int groupId, int childId, int num) {
        Log.d(TAG, "setNumber1: "+num);
        list.get(groupId).getList().get(childId).setNum(num);
    }

    //删除
    public void Removechild(int groupId, int childId) {
        list.get(groupId).getList().remove(childId);
    }

    //判断父条目是否为0
    public void setNumber(int groupId) {
        List<CartBean.DataBean.ListBean> list = this.list.get(groupId).getList();
        if (list.size() == 0) {
            list.remove(groupId);
        }
    }

    //改变所有条目状态
    public void setAllSlected(boolean check) {
        for (int i = 0; i < list.size(); i++) {
            for (int j = 0; j < list.get(i).getList().size(); j++) {
                list.get(i).getList().get(j).setSelected(check ? 1 : 0);
            }
        }
    }

    //判断所有条目
    public boolean ALLgroupIsSlected() {
        for (int i = 0; i < list.size(); i++) {
            for (int j = 0; j < list.get(i).getList().size(); j++) {
                int selected = list.get(i).getList().get(j).getSelected();
                //如果没有选中 返回false
                if (selected == 0) {
                    return false;
                }
            }
        }
        return true;
    }

    //判断父条目中有没有选中的子条目
    public boolean groupIsSlected(int groupId) {
        for (int j = 0; j < list.get(groupId).getList().size(); j++) {
            int selected = list.get(groupId).getList().get(j).getSelected();
            //如果没有选中 返回false
            if (selected == 0) {
                return false;
            }
        }

        return true;
    }

    onCartListener onCartListener;

    public void setOnCartListener(MyExpandAdapter.onCartListener onCartListener) {
        this.onCartListener = onCartListener;
    }

    public interface onCartListener {
        void onGroupChecked(int groupId);

        void onGoodChecked(int groupId, int childId);

        void onGoodNumChange(int sellerid, int pid, int num, String selected, int groupId, int childId);

        void onDelete(int groupId, int childId, String pid);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值