购物车的逻辑代码与适配器

Android 双RecyclerView嵌套实现购物车逻辑 下面代码通过Recyclerview嵌套Recyclerview实现了购物车的全选、反选和点选。先来看看效果图吧! 先来XML布局: 主页面布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android 阅读详情


Bean里添加的状态

            private int isFrist;   //是否选中商家
            public boolean shopSelected;  //商家多选是否选中
            public boolean itemSelected;   //条目多选是否选中


public class MyAdapter extends RecyclerView.Adapter<MyAdapter.IViewHolder>{
    Context context;
    private List<String> ImageList = new ArrayList<>();
    private List<GetBean.DataBean.ListBean> list;
    Map<String,String> map = new Hashtable<>();
    public MyAdapter(Context context) {
        this.context = context;
    }


    public void add(GetBean getBean){
        if(list==null){
            list = new ArrayList<>();
        }
        for(GetBean.DataBean shop:getBean.getData()){
            map.put(shop.getSellerid(),shop.getSellerName());
            for(int i = 0; i<shop.getList().size();i++){
                list.add(shop.getList().get(i));
            }
        }

        setFirst(list);
        notifyDataSetChanged();

    }

    public void setFirst(List<GetBean.DataBean.ListBean> list){
        if(list.size()>0){
            list.get(0).setIsFrist(1);
            for(int i = 1;i<list.size();i++){
                if(list.get(i).getSellerid()==list.get(i-1).getSellerid()){
                    list.get(i).setIsFrist(2);
                }
                else{
                    list.get(i).setIsFrist(1);
                }
            }
        }
    }

    @Override
    public IViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.layout_adapter, null);
        return new IViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final IViewHolder holder, final int position) {

        if(list.get(position).getIsFrist() == 1){
            //显示商家
            holder.shop_check.setVisibility(View.VISIBLE);
            holder.shop_name.setVisibility(View.VISIBLE);
            holder.shop_check.setChecked(list.get(position).isShopSelected());

//            显示商家的名称
//            list.get(position).getSellerid() 取到商家的id
//            map.get()取到 商家的名称
            holder.shop_name.setText(map.get(String.valueOf(list.get(position).getSellerid())));
        } else {
            holder.shop_check.setVisibility(View.GONE);
            holder.shop_name.setVisibility(View.GONE);
        }

        holder.shoptitle.setText(list.get(position).getTitle());
        holder.shopprice.setText(list.get(position).getPrice()+"");
        holder.checkbox.setChecked(list.get(position).isItemSelected());
        String images = list.get(position).getImages();
        String[] split = images.split("\\|");
        for(int i = 0;i<split.length;i++){
            ImageList.add(split[i]);
        }
        ImageLoader.getInstance().displayImage(ImageList.get(position),holder.shopface);

        holder.plusView.setEditView(list.get(position).getNum());
        holder.shopdel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                list.remove(position);
                setFirst(list);
                notifyDataSetChanged();
                sum(list);
            }
        });

        holder.checkbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                list.get(position).setItemSelected(holder.checkbox.isChecked());

                for(int i = 0;i<list.size();i++){
                    for(int j = 0;j<list.size();j++){
                        if(list.get(i).getSellerid() == list.get(j).getSellerid() && !list.get(j).isItemSelected()){
                            list.get(i).setShopSelected(false);
                            break;
                        }
                        else{
                            list.get(i).setShopSelected(true);
                        }
                    }
                }

                notifyDataSetChanged();
                sum(list);
            }
        });

        holder.plusView.setLinsenter(new PlusView.ClickLisenter() {
            @Override
            public void click(int count) {
                list.get(position).setNum(count);
                notifyDataSetChanged();
                sum(list);
            }
        });

        holder.shop_check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                list.get(position).setShopSelected(holder.shop_check.isChecked());
                for(int i=0; i<list.size();i++){
                    if(list.get(position).getSellerid()==list.get(i).getSellerid()){
                            list.get(i).setItemSelected(holder.shop_check.isChecked());
                    }
                }

                notifyDataSetChanged();
                sum(list);
            }
        });
    }

    public void sum(List<GetBean.DataBean.ListBean> list){
        int totalNum = 0;
        float totalMoney = 0.0f;
        boolean allcheck = true;
        for(int i = 0; i <list.size(); i++){
            if(list.get(i).isItemSelected()){
                totalNum += list.get(i).getNum();
                totalMoney += list.get(i).getPrice()*list.get(i).getNum();
            }
            else{
                allcheck = false;
            }
        }

        listener.setTotal(totalMoney+"",totalNum+"",allcheck);
    }


    public void selectAll(boolean check){
        for(int i = 0;i<list.size();i++){
            list.get(i).setShopSelected(check);
            list.get(i).setItemSelected(check);
        }

        notifyDataSetChanged();
        sum(list);
    }

    @Override
    public int getItemCount() {

        return list==null ? 0 : list.size();
    }

    static class IViewHolder extends RecyclerView.ViewHolder{

        private final PlusView plusView;
        private final Button shopdel;
        private final CheckBox shop_check;
        private final ImageView shopface;
        private final TextView shop_name;
        private final CheckBox checkbox;
        private final TextView shoptitle;
        private final TextView shopprice;

        public IViewHolder(View itemView) {
            super(itemView);

            plusView = (PlusView) itemView.findViewById(R.id.plusView);
            shopdel = (Button) itemView.findViewById(R.id.shopdel);
            shop_check = (CheckBox) itemView.findViewById(R.id.shop_check);
            shopface = (ImageView) itemView.findViewById(R.id.shopface);
            shop_name = (TextView) itemView.findViewById(R.id.shop_name);
            checkbox = (CheckBox) itemView.findViewById(R.id.checkbox);
            shoptitle = (TextView) itemView.findViewById(R.id.shoptitle);
            shopprice = (TextView) itemView.findViewById(R.id.shopprice);
        }
    }
    UpdateUiListener listener;
    public void setListener(UpdateUiListener listener){
        this.listener = listener;
    }

    public interface UpdateUiListener{
        public void setTotal(String total,String num,boolean allcheck);
    }
}



Android 购物车实现(思路+步骤+源码,android视频提取音频 面试是一个不断学习、不断自我提升的过程,有机会还是出去面面,至少能想到查漏补缺效果,而且有些知识点,可能你自以为知道,但让你说,并不一定能说得很好。有些东西有压力才有动力,而学到的知识点,都是钱(因为技术人员大部分情况是根据你的能力来定级、来发薪水的),技多不压身。附上我的面试各大专题整理: 面试指南,满满的都是干货,希望对大家有帮助!本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录一个人可以走的很快,但一群人才能走的更远。 阅读详情

相关推荐

电商网站 ---购物车逻辑代码实现

打算做一个电商APP的模板,目前做了引导页,banner,购物车。这里主要体现购物车的实现

技术分享-商品篇-购物车【加购功能】(八)

加入购物车与立即购买功能是用户购物流程中的核心环节,直接关系到用户体验、交易效率及系统稳定性。本文将对这两个功能的设计逻辑、注意事项、安全防护以及活动商品的并发处理进行深度剖析

BOBO博客 2606

Cadence SIP Layout 简单教程-第二章

[从whp1920 网易博客迁移至优快云] 第一章在正式布线之前做了必须做的准备工作,下面进入正题,打开Candence SIP RF Layout GXL软件。 第一节 导入外形尺寸 打开SIP设置文件保存路径,如下图所示进入导入DXF页面,选中前一章时画好的外框图。打开导入界面后,再进入DXF In Edit/View Layers界面选择所有层,导入Class选择DRAWING FOR...

whp1920的博客 6939

添加商品到购物车逻辑

1.先判断cookie中是否有购物车,没有就把对象存到数组中,再存到cookie中, 2.如果cookie中有购物车,就通过规格Id判断cookie中的对象数组是否存在此规格Id的对象,存在就购买数量加一,不存在就把当前规格Id的对象插入到cookie对象数组中 相关前端代码 // 由于cookie大小限制为4k,另外课程第一阶段是没有redis的,所以相关暂存性内容会存入到cookie中 var shopcartCounts = app.getShopcartItemCounts();

qingwenc的博客 2416

一篇NS SAR ADC的学习记录

一篇NS SAR ADC的学习记录 内容包含: OverSampling Noise Shaping Dynamic Amplifier DAC with Redundancy 最近看了些有意思的SAR ADC结构,但是因为确实对模拟这个领域不太熟,导致了一系列的级联查找,最终达到了一个大概能懂的状态,为了理清思路,顺便别让看了这么些天的东西浪费了,还是计划写篇文章。 ps:由于不是一篇特别正紧的报告,参考文献就写的比较随便,且我还是个做数字的 A 13.5-ENOB, 107-μW Noise-Sha

weixin_45669724的博客 8712

CST 仿真_NFC仿真

在CST中实现NFC天线单体的仿真

qq_43706810的博客 3961

关于购物车功能的逻辑代码 PHP和Vue开发

可以使用MySQL来创建一个名为“cart”的数据库,并创建两个表格,一个用于存储用户订单的信息,“orders”表格,另一个用于存储商品的信息,“products”表格。2、接下来,将使用PHP来处理后端逻辑。接下来,我们将计算商品的总价,并在数据库中插入用户的订单信息。接下来,我们将创建四个PHP文件用于处理以下四种功能——添加商品到购物车、获取购物车中的商品、更新购物车中的商品数量和从购物车中删除商品。11、首先获取通过POST请求传递的订单ID,然后使用该订单ID从数据库中删除相应的订单信息。

withkai44的博客 1307

5分钟快速验证lvgl界面:VScode模拟器极简配置法(免环境变量版)

本文介绍了一种5分钟快速验证LVGL界面的极简配置方法,使用VSCode模拟器免环境变量配置,适合UI设计师和产品经理快速预览界面效果。通过预编译的SDL2库和配置好的VSCode工程模板,实现开箱即用的LVGL界面验证,大幅提升工作效率。

weixin_30790841的博客 314

小程序加入购物车的逻辑

/*点击加入购物车,判断当前用户以及手机号,昵称,商品id是否已经加入到后端数据库,如果加入过,在数量上加1,如果没有加入,就要新创建一条数据*/ request({ url:`/carts?nickName=${nickName}&tel=${tel}&goodId=${goodId}` }).then(res=>{ console.log(res) //没有加入 if(res.length=

weixin_64812436的博客 613

SAP FICO - 外币交易实战:汇率类型配置与货币换算率管理

月底关账前的外币评估就像财务人的"期末考",OB59配置就是你的备考方案。最低值原则(Lowest value principle)最保守。它会比较原始汇率与评估日汇率,取不利方向确认损失。适合风险厌恶型企业,我在制造业客户中应用最多。重估法(Revalue only)更反映市场现状。无论盈亏都按最新汇率调整,适合交易性金融资产处理。有个基金公司客户就靠这个方法及时反映了外汇波动收益。最小差异金额(Minimum difference)是防骚扰设置。

weixin_42524708的博客 358

CentOS7.9 安装 ImageMagick,图片转换为HEIC图像格式

由于ImageMagick7以下不支持heic等图片格式,所以重新安装了ImageMagick7.1版本支持heic格式,在网上找了很多资料,归纳总结并写此文章记录一下。在Linux(CentOS7.9)上安装ImageMagick7.1.1-38。

shmily_i的博客 1941

购物车模块实现(类比京东和天猫)

购物车购物车购物车业务逻辑登录情况(天猫)不登录情况(京东)实现思路和代码实现天猫登录情况下实现添加查询京东不登录情况下实现添加购物车查询 购物车 购物车分为用户登录购物车和未登录购物车操作,国内知名电商京东用户登录和不登录都可以操作购物车,如果用户不登录,操作购物车可以将数据存储到Cookie,用户登录后购物车数据可以存储到Redis中,再将之前未登录加入的购物车合并到Redis中即可。 淘宝天猫则采用了另外一种实现方案,用户要想将商品加入购物车,必须先登录才能操作购物车。 购物车业务逻辑 (1)需求分析

m0_46690280的博客 1912

一文让你轻松理解Wi-Fi理论速率计算方式

如上所示,在使用FDM的802.11协议上,最小子载波带宽为312.5KHz,那一个信道频宽为20MHz的信道可以分成64个子载波,但是由于技术原因,有效使用的是52个子载波,实际用于数据传输的只有48个,有4个子载波充当导频载波。载波:交流信号或者直流信号本身不具备数据传输能力,但是如果信号发生很小的波动或者变化,从而实现数据的收发。所谓子载波,就是将信号划为为很多的小信道,这些小信道可以实现数据的并发传输,子载波我们英文称为subcarrier,也称为音调(tone)。Symbol time如下所示。

1042484520@qq.com(邮箱) 3448

购物车页面及代码

子类适配器代码&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout android:orientation="horizontal" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.

Caihua_CN的博客 5027

基于分数阶的图像边缘细节检测——边缘计算

在图像处理中,我们可以使用分数阶导数运算器来计算图像的分数阶梯度,从而得到更精确的边缘信息。通过使用基于分数阶的图像边缘细节检测方法,我们可以更准确地捕捉图像中的边缘细节信息。在这篇文章中,我们将介绍一种基于分数阶的方法来进行图像边缘细节检测,并提供相应的源代码实现。需要注意的是,以上提供的代码示例仅用于演示基于分数阶的图像边缘细节检测方法的实现。然后,我们读取了待处理的图像,并进行了预处理,如高斯模糊,以减少噪声的影响。最后,我们通过设置一个阈值,将梯度图像转化为二值化的边缘图像,并将结果显示出来。

GudcSql的博客 403

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

购物车的主要业务逻辑

购物车的主要业务逻辑MainActivity的代码布局文件xmllistView的布局共享的类实物类标题的布局 MainActivity的代码 package com.example.shop; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android...

shuai_ge_feng的博客 1131

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

购物车简单逻辑

对于购物车自己做的一些简单的逻辑处理,能力有限还望多多指教 使用RecyclerView展示的数据 首先在主界面的布局是这样的<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://

xiao_duo_space的博客 390

购物车的基本代码 不完善

//自定义加减器 public class SubAddButton extends LinearLayout { private View root; private TextView tvSub,tvNum,tvAdd; private OnNumChangedListener numChangedListener; //new 调用 public SubAddButton(Context ...

black_amber的博客 270

仿京东购物车适配器(二级列表)

//布局页面 &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height...

chenyibai的博客 233

购物车布局+代码

//布局文件 LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> LinearLayout android:layout_width="

gongyaqi的博客 614

云炬Android开发笔记 13购物车,订单,支付功能开发(包含支付宝支付和微信支付)

阅读目录 1.购物车UI编写 1.1 购物车布局 1.2 recycleView中的item的布局 2. 购物车数据结构分析、解析与转化 2.1 解析的数据 2.2 数据的转化 2.3 数据适配器的添加 3. 购物车逻辑梳理与实现 3.1 是否选中的事件的响应 3.2 全选按钮事件的响应 3.3 闪屏bug 3.4 删除按钮的功能实现 3.5 清空购物车 3.6 清空购物车之后的额外内容的显示 3.7 左右加号减号的功能的实现 3.8 结算功能的实现 4.订单和支付逻辑梳理和处理 4....

科大云炬 1361

简单的购物车(RecyclerView)

在电商项目中购物车是必不可少的,也是有一定难度的。现在我们来写一些购物车有关的代码: 我们先看看购物车MainActivity的布局xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:l

8023asd的博客 482

购物车逻辑

@Override public void initData() { super.initData(); // 获取公共参数 config = context.getSharedPreferences(“config”, 0); token = config.getString(“token”, “”); uid = config.getString(“uid”, “”); // 获取展示商品的控...

weixin_43191402的博客 235

简单的二级商品购物车

记得接口类中添加 private boolean ischecksi = false; public boolean isIschecksi() { return ischecksi; } public void setIschecksi(boolean ischecksi) { ...

weixin_43936560的博客 172

购物车

主布局 &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools=&quot

weixin_43668405的博客 142

Retrofit+Axjava+EventBus+Fresco购物车

1.首先 导入依赖 权限 (1) /*retrofit网络请求*/ implementation 'com.squareup.retrofit2:retrofit:2.1.0' implementation 'com.squareup.retrofit2:converter-gson:2.1.0' /*eventbus传值*/ implementation '...

qq_42785994的博客 331
上一篇: MVP二级购物车布局和简单逻辑
下一篇: 自定义拦截器GET请求POST请求
Developer_Sir
博客等级 码龄9年 3粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值