购物车的二级列表适配器

Android购物车的功能实现(二级列表) 阅读详情
package com.lbp.yuekao.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;

import com.lbp.yuekao.R;
import com.lbp.yuekao.bean.GoosBean;
import com.lbp.yuekao.bean.MessageEvent;
import com.lbp.yuekao.bean.PriceAndCountEvent;

import org.greenrobot.eventbus.EventBus;

import java.util.List;

/**
 * Created by Administrator on 2018/1/17 0017.
 */

public class MyExAdapter extends BaseExpandableListAdapter {
    private Context context;
    private List<GoosBean.DataBean> groupList;
    private List<List<GoosBean.DataBean.DatasBean>> childList;
    private final LayoutInflater inflater;

    public MyExAdapter(Context context, List<GoosBean.DataBean> groupList, List<List<GoosBean.DataBean.DatasBean>> 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 i) {
        return childList.get(i).size();
    }

    @Override
    public Object getGroup(int i) {
        return groupList.get(i);
    }

    @Override
    public Object getChild(int i, int i1) {
        return childList.get(i).get(i1);
    }

    @Override
    public long getGroupId(int i) {
        return i;
    }

    @Override
    public long getChildId(int i, int i1) {
        return i1;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) {
        View view1;
        final GroupViewHolder groupViewHolder;
        if(view==null){
            groupViewHolder = new GroupViewHolder();
            view1 = inflater.inflate(R.layout.item_parent_market, null);
            groupViewHolder.cbGroup = view1.findViewById(R.id.cb_parent);
            groupViewHolder.tv_number = view1.findViewById(R.id.tv_number);
            view1.setTag(groupViewHolder);
        }
        else{
            view1 = view;
            groupViewHolder = (GroupViewHolder) view1.getTag();
        }
        final GoosBean.DataBean dataBean = groupList.get(i);
        groupViewHolder.cbGroup.setChecked(dataBean.isChecked());
        groupViewHolder.tv_number.setText(dataBean.getTitle());
        groupViewHolder.cbGroup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dataBean.setChecked(groupViewHolder.cbGroup.isChecked());
                changeChildCbState(i,groupViewHolder.cbGroup.isChecked());
                EventBus.getDefault().post(compute());
                changeAllCbState(isAllGroupCbSelected());
                notifyDataSetChanged();
            }
        });
        return view1;
    }



    @Override
    public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) {
        View view1;
        final ChildViewHolder holder ;
        if(view==null){
            holder = new ChildViewHolder();
            view1 = inflater.inflate(R.layout.item_child_market, null);
            holder.cbChild = view1.findViewById(R.id.cb_child);
            holder.tv_tel = view1.findViewById(R.id.tv_tel);
            holder.tv_content = view1.findViewById(R.id.tv_content);
            holder.tv_time = view1.findViewById(R.id.tv_time);
            holder.tv_price = view1.findViewById(R.id.tv_pri);
            holder.tv_del = view1.findViewById(R.id.tv_del);
            holder.iv_add = view1.findViewById(R.id.iv_add);
            holder.iv_del = view1.findViewById(R.id.iv_del);
            holder.tv_num = view1.findViewById(R.id.tv_num);
            view1.setTag(holder);
        }else{
            view1=view;
            holder = (ChildViewHolder) view1.getTag();
        }
        final GoosBean.DataBean.DatasBean datasBean = childList.get(i).get(i1);
        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_price.setText(datasBean.getPrice() + "");
        holder.tv_num.setText(datasBean.getNum() + "");

        holder.cbChild.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                datasBean.setChecked(holder.cbChild.isChecked());
                PriceAndCountEvent priceAndCountEvent = compute();
                EventBus.getDefault().post(priceAndCountEvent);
                if (holder.cbChild.isChecked()){
                    if(isAllChildCbSelected(i)){
                        changGroupCbState(i,true);
                        changeAllCbState(isAllGroupCbSelected());
                    }
                }else{
                    changGroupCbState(i,false);
                    changeAllCbState(isAllGroupCbSelected());
                }
                notifyDataSetChanged();
            }
        });

        holder.iv_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int num = datasBean.getNum();
                holder.tv_num.setText(++num + "");
                datasBean.setNum(num);
                if (holder.cbChild.isChecked()) {
                    PriceAndCountEvent priceAndCountEvent = compute();
                    EventBus.getDefault().post(priceAndCountEvent);
                }
            }
        });
        holder.iv_del.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int num = datasBean.getNum();
                if (num == 1) {
                    return;
                }
                holder.tv_num.setText(--num + "");
                datasBean.setNum(num);
                if (holder.cbChild.isChecked()) {
                    PriceAndCountEvent priceAndCountEvent = compute();
                    EventBus.getDefault().post(priceAndCountEvent);
                }
            }
        });
        holder.tv_del.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                List<GoosBean.DataBean.DatasBean> datasBeen = childList.get(i);
                GoosBean.DataBean.DatasBean remove = datasBeen.remove(i1);
                if (datasBeen.size() == 0) {
                    childList.remove(i);
                    groupList.remove(i);
                }
                EventBus.getDefault().post(compute());
                notifyDataSetChanged();
            }
        });
        return view1;
    }

    @Override
    public boolean isChildSelectable(int i, int i1) {
        return false;
    }



    private void changeChildCbState(int groupposition ,boolean flag){
        List<GoosBean.DataBean.DatasBean> beans = childList.get(groupposition);
        for (int i = 0; i <beans.size() ; i++) {
            GoosBean.DataBean.DatasBean bean = beans.get(i);
            bean.setChecked(flag);
        }
    }

    private void changeAllCbState(boolean flag) {
        MessageEvent event = new MessageEvent();
        event.setChecked(flag);
        EventBus.getDefault().post(event);
    }

    private void changGroupCbState(int groupPosition, boolean flag) {
        GoosBean.DataBean dataBean = groupList.get(groupPosition);
        dataBean.setChecked(flag);
    }

    private boolean isAllGroupCbSelected() {
        for (int i = 0; i < groupList.size(); i++) {
            GoosBean.DataBean dataBean = groupList.get(i);
            if (!dataBean.isChecked()) {
                return false;
            }
        }
        return true;
    }

    class GroupViewHolder {
        CheckBox cbGroup;
        TextView tv_number;
    }

    class ChildViewHolder {
        CheckBox cbChild;
        TextView tv_tel;
        TextView tv_content;
        TextView tv_time;
        TextView tv_price;
        TextView tv_del;
        ImageView iv_del;
        ImageView iv_add;
        TextView tv_num;
    }

    private PriceAndCountEvent compute() {
        int count = 0;
        int price = 0;
        for (int i = 0; i < childList.size(); i++) {
            List<GoosBean.DataBean.DatasBean> datasBeen = childList.get(i);
            for (int j = 0; j < datasBeen.size(); j++) {
                GoosBean.DataBean.DatasBean datasBean = datasBeen.get(j);
                if (datasBean.isChecked()) {
                    price += datasBean.getNum() * datasBean.getPrice();
                    count += datasBean.getNum();
                }
            }
        }
        PriceAndCountEvent priceAndCountEvent = new PriceAndCountEvent();
        priceAndCountEvent.setCount(count);
        priceAndCountEvent.setPrice(price);
        return priceAndCountEvent;
    }

    private boolean isAllChildCbSelected(int groupPosition) {
        List<GoosBean.DataBean.DatasBean> 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;
    }

    public void changeAllListCbState(boolean flag) {
        for (int i = 0; i < groupList.size(); i++) {
            changGroupCbState(i, flag);
            changeChildCbState(i, flag);
        }
        EventBus.getDefault().post(compute());
        notifyDataSetChanged();
    }
}



帮助类 
package com.lbp.yuekao.bean;

/**
 * Created by peng on 2017/11/17.
 */

public class MessageEvent {
    private boolean checked;

    public boolean isChecked() {
        return checked;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
    }
}

package com.lbp.yuekao.bean;

/**
 * Created by peng on 2017/11/17.
 */

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 CartsAdapter extends RecyclerView.Adapter<CartsAdapter.ViewHolder> { private Context context; private List<CartBean.DataBean.ListBean> cartsdata; public CartsAdapter(Con... 阅读详情

相关推荐

通达信强龙趋势幅图指标:从强弱分析到买卖点实战指南

在股票技术分析中,趋势判断一直是交易决策的核心环节。传统指标通常依赖均线交叉或MACD金叉来确认趋势,但这种确认机制天然存在滞后性,往往等信号明确时行情已走过大半。针对这一问题,基于价格位置、量能配合和均线结构三个维度综合打分的思想逐渐受到关注,通过量化个股所处强弱区间,帮助投资者更快识别强势股与风险信号。这类强弱分析工具不仅适用于刚接触公式编辑的新手,也能为有经验的交易者提供一把可视化的“强度刻度尺”。在实际应用中,结合回踩低吸、离场判断等交易场景,能够有效提升买卖点的把握能力。本文详细解析通达信强龙趋势

weixin_29044157的博客 325

购物车

//MainActivity 页面package guobao.bwie.com.gwc;import android.app.Activity;import android.content.Context;import android.content.DialogInterface;import android.os.Bundle;import android.os.Handler;import

LSJ44的博客 1230

CyberChef本地搭建

CyberChef本地搭建

2301_80241182的博客 6076

二级购物车的Adapter判断

import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.Check

这个不能实现 1万+

生存分析机器学习问题

然而,随着人工智能 (AI) 和机器学习 (ML) 的兴起,科学家现在能够开发更复杂的模型,揭示这些数据集中的模式和特征,从而为癌症的生物学、诊断、预后、治疗和预后提供新的见解。病情更重的患者可能接受更强(或更弱)的治疗,导致治疗方案与不良预后(死亡)强相关。数据集中包含失访或研究结束时仍存活的患者(删失数据),他们的真实生存时间未知,仅知道其存活时间不低于观察到的最后一次随访时间。优先选择参数少、结构简单的模型(如带强正则化的线性模型、简单树模型),避免复杂模型(如深度神经网络)。时刻的状态是未知的。

4AM_明朝百晓生 1223

从AAAI 2025被拒到ACM MM 2025录用:我的论文投稿经验与教训总结

本文分享了作者从AAAI 2025被拒到ACM MM 2025录用的论文投稿经验与教训。详细解析了格式要求、可复现性清单等关键细节,提供了精准转投策略和提升录用概率的实用技巧,帮助研究者避免常见错误并优化投稿策略。

weixin_29207533的博客 502

二级列表购物车适配器啊

package com.example.aason.zhushayuekaomini.adapter; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.Layout...

Aasons的博客 167

vs code , 配置 claude code 插件, 默认选项 : --dangerously-skip-permission

摘要:本文介绍如何在VS Code中为Claude Code插件配置--dangerously-skip-permission参数,包含两种方法:图形界面设置(适合新手)和直接编辑settings.json(精准配置)。该参数会跳过权限检查,仅建议在本地测试环境中使用。配置后需通过命令面板验证参数是否生效,并注意安全风险,避免在生产环境使用。多参数配置时需用数组格式,不同版本插件可能键名略有差异。

AI天才研究院 4992

android二级列表购物车

一.导入EventBus的依赖 compile 'org.greenrobot:eventbus:3.1.1' eventBus必须注册 EventBus.getDefault().register(this); 必销毁 //销毁方法 @Override protected void onDestroy() { super.onDestroy();

W1256754982的博客 1183

MicroCap声学仿真介绍(一)

5-频率上下限选择,需要注意的是,第一个数字是上限,第二个数字是下限,如果填反了,会有报错提示;下三角可以选择“Auto”、“linear”、“log”和“list”,设置的是频率点之间的距离和频率点的数量。Component是用来选择部件的模块,如上图所示,声学仿真常用到的是“Electroacoustic Macros AC”、“Electroacoustic Macros TR”、“NXP Transducers”以及“NXP HD components”。3是声学部件,是声学仿真中常用的部件。

山无忧的博客 5093

[工作流节点10] 获取多条数据并循环执行 —— 明道云批处理自动化实战

本文系统介绍了明道云工作流中"获取多条数据+循环执行"的批处理功能。该功能通过筛选数据集合并逐条处理,适用于批量通知、数据更新等场景。文章详细解析了功能配置方法,包括数据筛选、循环设置和异常处理,并提供了合同到期提醒等典型应用案例。同时强调了数据量控制、分批处理、错误处理等优化策略,帮助用户实现高效批量自动化。这一功能组合能将业务从单条处理升级为批量驱动,显著提升工作效率。

每日出拳老爷子的博客 455

购物车二级列表全选、反选/适配器

public class Frag01 extends Fragment implements BaseView { private RecyclerView mRecycler; private TextView mTvPrice; private TextView mTvMoney; private ShopCarAdapter adapter; private BasePresenter p...

Jang_AnGe的博客 321

完整功能-《网络安全创新实践》:设计并实现一种基于Npcap的网络嗅探器(直接能运行cpp的MFC代码+实验报告)

《网络安全创新实践》:设计并实现一种基于Npcap的网络嗅探器。(直接能跑的MFC)监听所有数据包,以及监听指定IP地址的数据包;(2)能够显示完整的IP数据包首部信息,例如:版本、首部长度、数据包长度、数据包类型(协议字段)、TTL、源IP地址、目的IP地址等;(3)能够显示完整的TCP报文段信息,例如:源端口、目的端口、序号、确认号、数据部分等;(4)能够自动检测SQL注入攻击等Web攻击行为;(5)能够将监听到的数据包信息保存到文件中,以及从文件中读取并显示数据包信息;(6)具有图形化操作界面。

weixin_46531010的博客 660

购物车二级列表适配器

package wld.bawei.com.myjindong.Adapter; import android.content.Context; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.uti

大神大咖大牛 403

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

//布局页面 &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

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

android 用二级列表实现仿京东购物车

2.首先先自定义一个二级列表package com.example.jingdong.erji; import android.content.Context; import android.util.AttributeSet; import android.widget.ExpandableListView; /** * Created by huoxuebin on 2018/4/24....

huoxuebin0316的博客 1004

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Android_二级列表购物车逻辑

二级列表适配器: package activity.example.com.jindongdemo.Adapter; import android.content.Context; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.Bas

Android___vv的博客 791

二级列表的购物车-适配器

package com.example.recycler.adapter; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.C

My9973636800的博客 367

仿京东购物车Deom

写代码前要先加上权限和依赖: android:name="android.permission.READ_EXTERNAL_STORAGE" /> android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> android:name="android.permission.INTERNET" /> 依赖: compile

biggrand的博客 1397

RecyclerView实现二级列表

那今天就教大家使用RecyclerView来实现二级列表的购物车 废话不多说 直接上代码 权限 android:name="android.permission.INTERNET"> android:name="android.permission.READ_EXTERNAL_STORAGE" /> android:name="android.permission.WRIT

cm1606530815的博客 4768

android购物车分类,Android实现二级列表购物车功能

本文实例为大家分享了Android实现二级列表购物车功能的具体代码,供大家参考,具体内容如下MainActivity:package com.baway.twoshopcar;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android...

weixin_33210666的博客 514

安卓购物车二级列表简单展示(仿京东,淘宝效果)

首先导入依赖 implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'com.squareup.okhttp3:okhttp:3.1.2' implementation 'com.facebook.fresco:fresco:0.12.0' implementation 'com.squareup.re...

weixin_44285793的博客 779

仿京东、淘宝实现购物车(二级列表的形式)

本章仿京东、淘宝实现的形式是通过二级列表实现的,网络请求工具类是通过okHttp实现的 本章使用到的依赖 //相关依赖 //okhttp implementation 'com.squareup.okhttp3:okhttp:3.11.0' //Gson implementation 'com.google.code.gson:gson:2.8.1' ...

mingxiangzhimin的博客 1173

Android购物车的总结

购物车布局<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match

wrpbk的博客 582

购物车的具体实现步骤

//数据库创建 ```java package soexample.umeng.com.day_04_greendao.app; import android.app.Application; import soexample.umeng.com.day_04_greendao.dao.DaoMaster; import soexample.umeng.com.day_04_greendao...

qq_26014095的博客 305

android 购物车二级列表实现

首先看个效果图: 在我们做这个是时候,首先必须一定要导入权限: uses-permission android:name="android.permission.INTERNET" /> uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> uses-permission androi

wqzfy的博客 866
上一篇: 购物车的布局文件
下一篇: 购物车的工具类
忙着写BUG
博客等级 码龄9年 11粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值