美文网首页
安卓 仿饿了么购物车 电商

安卓 仿饿了么购物车 电商

作者: 阿里高级软件架构师 | 来源:发表于2023-05-04 15:52 被阅读0次

    最近在做一个商城系统,因为要做购物车一个功能,然后还要和饿了么购物车一模一样,我刚开始也是各种找资料,但是网上的都是死数据,用Map集合或者用SparrayMap存储。现在我自己写接口,自己用活数据填充。后台接口我也是弄了半天,我先把接口显示的接口数据展示一下:

    kind是全部商品的种类,goods是商品集合。num是用户已经采购的订单中的数量,所以,我们进行json解析Format一下,生成实体类

    我先上图,我已经做好的界面:

    左边 的条目,右边的商品,底部的购物车,然后还有弹窗出现,然后还有商品价格计算

    网上大部分是用map集合,我现在用list集合

    先展示adapter适配器代码:

    public class GoodsAdapterextends BaseAdapterimplements StickyListHeadersAdapter, GoodCarContract.View {

    private ListdataList;

        private SortFragmentmContext;

        private NumberFormatnf;

        private LayoutInflatermInflater;

        private GoodCarPresentergoodCarPresenter =new GoodCarPresenter(this);

        private int layoutPosition;

        public GoodsAdapter(List dataList, SortFragment mContext) {

    this.dataList = dataList;

            this.mContext = mContext;

            nf = NumberFormat.getCurrencyInstance();

            nf.setMaximumFractionDigits(2);

            mInflater = LayoutInflater.from(mContext.getContext());

        }

    @Override

        public ViewgetHeaderView(int position, View convertView, ViewGroup parent) {

    if (convertView ==null) {

    convertView =mInflater.inflate(R.layout.item_header_view, parent, false);

                convertView.setVisibility(View.GONE);

            }

    convertView.setVisibility(View.GONE);

            return convertView;

        }

    @Override

        public long getHeaderId(int position) {

    return dataList.get(position).getId();

        }

    @Override

        public int getCount() {

    if (dataList ==null) {

    return 0;

            }

    return dataList.size();

        }

    @Override

        public ObjectgetItem(int position) {

    return dataList.get(position);

        }

    @Override

        public long getItemId(int position) {

    return position;

        }

    @Override

        public ViewgetView(int position, View convertView, ViewGroup parent) {

    ItemViewHolder holder;

            if (convertView ==null) {

    convertView =mInflater.inflate(R.layout.ry_goods_list_item, parent, false);

                holder =new ItemViewHolder(convertView);

                convertView.setTag(holder);

            }else {

    holder = (ItemViewHolder) convertView.getTag();

            }

    GoodGson.GoodsBean item =dataList.get(position);

            holder.bindData(item,position);

            return convertView;

        }

    @Override

        public void addSuccess() {

    }

    @Override

        public void addFailed() {

    }

    @Override

        public void loadShopCarList(List goodsBeen) {

    }

    private class ItemViewHolder {

    private TextViewname, price, tvCount;

            private GoodGson.GoodsBeanitem;

            private ImageViewtvAdd, tvMinus, ivCover;

            public ItemViewHolder(View itemView) {

    name = (TextView) itemView.findViewById(R.id.tv_name);

                price = (TextView) itemView.findViewById(R.id.tv_price);

                tvCount = (TextView) itemView.findViewById(R.id.tv_count);

                tvMinus = (ImageView) itemView.findViewById(R.id.iv_reduce);

                tvAdd = (ImageView) itemView.findViewById(R.id.iv_add);

                ivCover = itemView.findViewById(R.id.iv_cover);

            }

    public void bindData(final GoodGson.GoodsBean item, final int position) {

    this.item = item;

                name.setText(item.getGoods_name());//商品名称

                Glide.with(mContext).load(item.getGoods_pic()).into(ivCover);//商品图片

                tvCount.setText(String.valueOf(item.getNum()));//商品数量

                price.setText(nf.format(item.getGoods_price()));//商品价格

                if (item.getNum() <1) {

    tvCount.setVisibility(View.GONE);

                    tvMinus.setVisibility(View.GONE);

                }else {

    tvCount.setVisibility(View.VISIBLE);

                    tvMinus.setVisibility(View.VISIBLE);

                }

    tvAdd.setOnClickListener(new View.OnClickListener() {

    @Override

                    public void onClick(View v) {

    SortFragment activity =mContext;

                        int count =item.getNum();

                        if (count <1) {

    tvMinus.setAnimation(getShowAnimation());

                            tvMinus.setVisibility(View.VISIBLE);

                            tvCount.setVisibility(View.VISIBLE);

                        }

    activity.add(item,position);

                        count++;

                        tvCount.setText(String.valueOf(count));

                        int[] loc =new int[2];

                        v.getLocationInWindow(loc);

                        activity.playAnimation(loc);

                    }

    });

                tvMinus.setOnClickListener(new View.OnClickListener() {

    @Override

                    public void onClick(View v) {

    SortFragment activity =mContext;

                        int count =item.getNum();

                        if (count <2) {

    tvMinus.setAnimation(getHiddenAnimation());

                            tvMinus.setVisibility(View.GONE);

                            tvCount.setVisibility(View.GONE);

                        }

    count--;

                        activity.remove(item,position);//activity.getSelectedItemCountById(item.id)

                        tvCount.setText(String.valueOf(count));

                    }

    });

            }

    }

    private AnimationgetShowAnimation() {

    AnimationSet set =new AnimationSet(true);

            RotateAnimation rotate =new RotateAnimation(0, 720, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f);

            set.addAnimation(rotate);

            TranslateAnimation translate =new TranslateAnimation(

    TranslateAnimation.RELATIVE_TO_SELF, 2f

                    , TranslateAnimation.RELATIVE_TO_SELF, 0

                    , TranslateAnimation.RELATIVE_TO_SELF, 0

                    , TranslateAnimation.RELATIVE_TO_SELF, 0);

            set.addAnimation(translate);

            AlphaAnimation alpha =new AlphaAnimation(0, 1);

            set.addAnimation(alpha);

            set.setDuration(500);

            return set;

        }

    private AnimationgetHiddenAnimation() {

    AnimationSet set =new AnimationSet(true);

            RotateAnimation rotate =new RotateAnimation(0, 720, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f);

            set.addAnimation(rotate);

            TranslateAnimation translate =new TranslateAnimation(

    TranslateAnimation.RELATIVE_TO_SELF, 0

                    , TranslateAnimation.RELATIVE_TO_SELF, 2f

                    , TranslateAnimation.RELATIVE_TO_SELF, 0

                    , TranslateAnimation.RELATIVE_TO_SELF, 0);

            set.addAnimation(translate);

            AlphaAnimation alpha =new AlphaAnimation(1, 0);

            set.addAnimation(alpha);

            set.setDuration(500);

            return set;

        }

    }

    点击事件中对item中num进行增加减少,逻辑简单,一般大家都会碰到全部的条目同时添加减少,只要设置tag就好了

    这段代码主要是添加的时候

    相关文章

      网友评论

          本文标题:安卓 仿饿了么购物车 电商

          本文链接:https://www.haomeiwen.com/subject/kotwxqtx.html