MVP二级购物车布局和简单逻辑

Android TabLayout + ViewPager2 导航实现与避坑指南 TabLayout 和 ViewPager2 是 Android 中实现标签式页面导航的基础组件,属于 Fragment 容器与 UI 指示器协同工作的典型范式。其核心原理是通过声明式绑定(setupWithViewPager)自动同步页面滑动与标签选中状态,避免手动监听导致的线程调度和生命周期错乱问题。技术价值在于轻量、稳定、低学习成本,且深度集成 AndroidX 生命周期管理,显著降低 Fragment 重建丢失、状态不同步等高频崩溃风险。广泛应用于新闻、电商、工具类 App 的顶部多标签页场景,尤其 阅读详情

布局用到组合控件,适配器展示RecyclerView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.bwie.d.yuekaogouwu1.MainActivity"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycle"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:orientation="horizontal">

        <CheckBox
            android:id="@+id/quanxuan"
            android:layout_weight="0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="全选"/>

        <LinearLayout
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:text="总价"
                android:id="@+id/zong"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:text="数量"
                android:id="@+id/liang"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>

        <Button
            android:text="去结算"
            android:layout_weight="0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

</LinearLayout>


适配器的布局文件引入组合控件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <CheckBox
            android:id="@+id/shop_check"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/shop_name"
            android:textSize="20sp"
            android:text="商户名称"
            android:layout_marginLeft="15dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout
        android:layout_marginLeft="30dp"
        android:gravity="center_vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <CheckBox
            android:id="@+id/checkbox"
            android:layout_weight="0"
            android:layout_gravity="center_vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <ImageView
            android:id="@+id/shopface"
            android:src="@mipmap/ic_launcher"
            android:layout_width="100dp"
            android:layout_height="100dp" />

        <LinearLayout
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="200dp"
            android:orientation="vertical">

            <TextView
                android:id="@+id/shoptitle"
                android:layout_marginLeft="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="商品信息"/>

            <TextView
                android:id="@+id/shopprice"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#f00"
                android:text="商品价格"/>

            <com.bwie.d.yuekaogouwu1.view.PlusView
                android:id="@+id/plusView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="10dp"/>

        </LinearLayout>

        <Button
            android:id="@+id/shopdel"
            android:layout_gravity="center_vertical"
            android:layout_weight="0"
            android:text="删除"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</LinearLayout>


组合控件

<Button
        android:id="@+id/revserse"
        android:background="@drawable/minus2"
        android:layout_width="30dp"
        android:layout_height="30dp" />

    <EditText
        android:id="@+id/content"
        android:text="1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/add"
        android:background="@drawable/plus2"
        android:layout_width="30dp"
        android:layout_height="30dp" />


MainActivity的逻辑代码

public class MainActivity extends AppCompatActivity implements MyPresenter.ViewCallBack{

    private CheckBox quanxuan;
    private TextView zong;
    private TextView liang;
    private RecyclerView recyclerView;
    private MyPresenter presenter;
    private MyAdapter adapter;
    private LinearLayoutManager manager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = (RecyclerView) findViewById(R.id.recycle);
        quanxuan = (CheckBox) findViewById(R.id.quanxuan);
        zong = (TextView) findViewById(R.id.zong);
        liang = (TextView) findViewById(R.id.liang);

        presenter = new MyPresenter(this);
        presenter.getdata();

        adapter = new MyAdapter(MainActivity.this);
        manager = new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false);
        recyclerView.setLayoutManager(manager);
        recyclerView.setAdapter(adapter);

        adapter.setListener(new MyAdapter.UpdateUiListener() {
            @Override
            public void setTotal(String total, String num, boolean allcheck) {
                zong.setText(total);
                liang.setText(num);
                quanxuan.setChecked(allcheck);
            }
        });

        quanxuan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                adapter.selectAll(quanxuan.isChecked());
            }
        });

    }

    @Override
    public void success(GetBean getBean) {

    adapter.add(getBean);
    }

    @Override
    public void failure(Exception e) {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.detach();
    }


组合控件的逻辑代码


public class PlusView extends LinearLayout{

    private EditText editText;
    private Button add;
    private Button revserse;
    private int mCount = 1;

    public PlusView(Context context) {
        super(context);
    }

    public PlusView(Context context, AttributeSet attrs) {
        super(context, attrs);

        View view = View.inflate(context, R.layout.layout_recy, null);
        editText = (EditText) view.findViewById(R.id.content);
        add = (Button) view.findViewById(R.id.add);
        revserse = (Button) view.findViewById(R.id.revserse);

        add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                String trim = editText.getText().toString().trim();
                int count = Integer.valueOf(trim)+1;
                mCount = count;
                editText.setText(count+"");
                if(linsenter !=null){
                    linsenter.click(count);
                }
            }
        });


        revserse.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                String trim = editText.getText().toString().trim();
                int count = Integer.valueOf(trim);
                if(count>1){
                    count--;
                    mCount = count;
                    editText.setText(count+"");
                }
                if(linsenter!=null){
                    linsenter.click(count);
                }

            }
        });

        addView(view);
    }

    public void setEditView(int num){
        if(editText!=null){
            editText.setText(num+"");
        }
    }

    public PlusView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    ClickLisenter linsenter;
    public void setLinsenter(ClickLisenter linsenter){
        this.linsenter = linsenter;
    }


    public interface ClickLisenter{
        public void click(int count);
    }
}



安卓原生开发为何是初创企业的生存基础设施 安卓原生开发是移动应用开发的基础技术路径,指基于Android SDK、直接调用系统API构建高性能、高可控性客户端的能力。其核心原理在于绕过Web容器或跨端中间层,实现对硬件传感器、后台服务、离线存储及厂商推送等底层能力的稳定访问。相比H5、小程序或跨平台方案,原生开发在弱网适配、消息送达率、启动性能和隐私合规等方面具备不可替代的技术价值。典型应用场景包括社区团购实时订单同步、智能硬件蓝牙联动、车载Android Auto集成、金融类App安全保活等强交互、低延迟、高可靠性需求领域。对于资源有限的初创企业 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化——第六十三篇 人机交互之前端交互参数知识库02

每个分支下又细分了四个关键方向,并按照“研究对象/焦点、基本问题、核心理论/概念、研究方法、应用/目标、前沿/发展”的框架进行阐述,严格遵循了六级编码体系。在最终整合时,应建立唯一的学科分类编码表(例如,用两位数字或“ART”、“MED”、“ECO”等字母前缀),并确保所有下级编码(尺度、层次、类别、子类、具体项)的逻辑一致性。此回答中的编码为示例,实际系统需据此调整。控制过程(前馈、同期、反馈)、全面质量管理(TQM)、平衡计分卡(BSC)定量(调查、实验)、定性(访谈、民族志)、混合方法、大数据。

weixin_49199313的博客 676

简单购物车的布局

//activity_main xml version="1.0" encoding="utf-8"?> RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tool

gh323093的博客 379

Fluent 2.5D动网格重构实战:涡旋压缩机复杂运动模拟指南

本文详细解析了Fluent 2.5D动网格重构技术在涡旋压缩机复杂运动模拟中的应用。通过对比传统方法,2.5D重构显著提升了计算效率和稳定性,特别适用于柱体类几何的网格处理。文章提供了从基础配置到参数优化的实战指南,包括关键设置步骤、常见问题排查及性能优化策略,帮助工程师有效解决动网格重构中的负体积和网格畸变问题。

weixin_28455801的博客 549

Android--ExpandableListview二级列表购物车功能实现

下面是购物车列表的简单实现~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 这是我所写的简单版MVP模式格式 导入相应的依赖 这里的依赖有很多请选择适合自己版本号的依赖 compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.squareup.okhttp3:okhtt

Arrogant——玖零 1643

深度解析direct path write temp与ASM IO性能问题:Oracle 19.17视图查询优化指南

本文深度解析了Oracle 19.17版本中复杂视图查询出现`direct path write temp`与`ASM IO for non-blocking poll`性能瓶颈的根本原因。通过对比11.2.0.4版本的执行计划差异,文章提供了从CBO参数调整、存储层优化到SQL架构重构的完整实战调优指南,帮助DBA有效解决升级后的查询性能问题。

2y3u4i5o6p的博客 1100

杭电oj2023题题目详解(Java版)

杭电oj2023题详解

m0_51065958的博客 978

购物车的简单布局

//activity_cart 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:id="@+i

gh323093的博客 397

英飞凌IGBT驱动芯片2ED020I12F2去饱和电路设计总结整理收集

记录下英飞凌IGBT驱动芯片限流电阻阻值设计

nizhenyuchina的博客 5996

Android二级购物车逻辑+RecycleView嵌套实现

上一篇文章已将说了一级购物车的逻辑,在这在按步骤贴一下二级购物车代码,我是用RecycleView嵌套RecycleView完成的,没有用二级列表,无非是下面几个逻辑,具体的看注释,具有一定的参考价值,感兴趣的可以参考一下! 先去第五步完成自定义View加减器,布局用; 逻辑: 全选或全不选(复选框); 商品控制商家(复选框); 商家控制商品复选框(复选框); 商家和商品控制全选(复选...

_万能的博哥的博客 988

第1章 机器人SLAM算法工程师主要做什么的?(附SLAM学习路线及资料推荐)

对于想从事机器人与自动驾驶领域的在校大学生、研究生来说,建图定位算法工程师是一个极具发展潜力的岗位,而SLAM知识体系则是胜任该岗位的核心支撑。从基础的计算机工具、C++语言,到核心的开源框架、数学知识,再到硬件衔接与项目实践,每一个环节都不可或缺。建议大家结合自身兴趣确定侧重方向(如激光SLAM、融合定位),先通过开源项目建立实践认知,再补全理论知识,同时积极参与社区交流。

行知SLAM 953

piamon实战-- 如何使用 Paimon 的 Java API 实现数据的点查

点查(Point Lookup)是指通过 ​​唯一键(Primary Key)​​ 快速定位并返回单条或少量数据的查询模式。例如:根据用户 ID 查询用户信息、根据订单号查询订单详情等。点查的核心诉求是 ​​低延迟​​ 和 ​​高吞吐​​,适用于实时风控、在线分析等场景。​​定义主键表结构​​,优化数据分布。​​构建过滤条件​​,使用指定查询键。​​执行查询并处理结果​​,结合流式更新实现实时查询。

阿华田的博客 532

仿京东购物车布局

//购物车主布局    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    andr

cdGuoXianSheng的博客 613

Python爬虫实战:深度解析携程/飞猪酒店评论API与大数据采集

本文详细介绍了如何通过Python爬虫技术获取携程和飞猪平台的酒店评论数据。我们涵盖了从API分析、反爬虫对策到数据存储和处理的完整流程。API逆向分析:通过浏览器开发者工具发现和分析API接口反爬虫对策:使用请求头随机化、IP代理、浏览器自动化等技术异步处理:使用asyncio提高爬取效率数据质量:实现数据清洗和质量检查机制系统架构:构建可扩展的分布式爬虫系统未来改进方向:机器学习识别验证码分布式爬虫架构实时数据流处理更智能的反反爬虫策略。

2201_76125261的博客 602

MVP模式下的二级购物车

一、布局        MainActivity的布局:          xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:l

androidyhr的博客 324

Copilot在游戏开发中的应用:Unity脚本自动生成实践

2021年GitHub Copilot的发布,为代码自动生成带来了革命性突破。作为基于GPT模型训练的AI辅助编程工具,Copilot能根据注释、函数名、代码上下文,实时生成符合语法和逻辑的代码片段,甚至完整脚本。减少重复劳动:自动生成模板代码(如生命周期、结构),让你专注核心逻辑;降低API学习成本:对Unity特有的组件(RigidbodyAnimator)、类(),Copilot能生成符合最佳实践的调用代码;统一代码风格:通过团队共享提示词模板,让生成的代码符合项目规范;快速原型迭代。

AIGC应用创新大全的博客 1619

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

二级购物车Demo

//先把布局做一下 //MainActivity布局<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match

qq_39972250的博客 315

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

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

高德地图+QQ登录分享跳转+mvp+ xRecyclerView+二级购物车+自定义view+全选和全不选+单价合计

效果图 主布局MainActivity &amp;amp;amp;amp;lt;?xml version=&amp;amp;amp;quot;1.0&amp;amp;amp;quot; encoding=&amp;amp;amp;quot;utf-8&amp;amp;amp;quot;?&amp;amp;amp;amp;gt; &amp;amp;amp;amp;lt;LinearLayout xmlns:android=&amp;a

weixin_44297368的博客 474

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

模仿京东购物车(二级列表,mvp请求数据)

//加入依赖 compile 'com.squareup.okhttp3:okhttp:3.9.0' compile 'com.google.code.gson:gson:2.8.2' compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' compile 'com.github.bumptech.glide:glide:3.7

c_hjf的博客 735

二级列表

首先先把权限加一下: 然后在加一下依赖:   compile 'com.squareup.okhttp3:okhttp:3.9.0'    compile 'com.squareup.okhttp3:logging-interceptor:3.9.0'     compile 'com.google.code.gson:gson:2.8.2'     compile 'com

fengfeng199326的博客 215

购物车模拟分类表(左recycleView,右2recycleView嵌套)

MainActivity package com.zjh.administrat.classify_recycleview.view; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.DividerItemDecoration; ...

qq_43143422的博客 310

基于HarmonyOS ArkTS API 24预约平台 ArkTS 声明式 UI 全方位技术解析,Column/Row/Scroll/Stack 的复合布局、setInterval 驱动的周期性特效

在移动互联网与智能穿戴设备高度普及的今天,"习惯养成"已经从一个模糊的自我管理理念,演变为一个可量化、可追踪、可视化的数字化产品赛道。越来越多的人希望借助手中的智能终端,把"早起、冥想、阅读、运动"这些抽象的自律行为,转化为一条条清晰的数据曲线和一张张可触摸的打卡卡片。而鸿蒙生态(HarmonyOS)凭借其跨设备协同、分布式软总线以及声明式 UI 开发框架 ArkUI,为这类注重"轻量化交互 + 即时反馈"的生活方式类应用提供了极为理想的生长土壤。本应用正是一款面向"晨间场景"深度打磨的习惯追踪工具。它聚焦

jin123322的博客 191

Newsletter产品化升级:从内容推送走向决策工具箱

Newsletter已超越传统信息分发,演变为面向独立开发者与小团队的轻量级产品决策支持系统。其核心原理在于将真实项目经验结构化为可验证、可复用的知识原子(Pattern/Tactic/Artifact),并通过语义化视觉语法(如PDG色标)、三维知识图谱与轻量协同网络(LCN)实现工程化交付。这种升级显著提升技术方案的迁移效率与实操转化率,广泛应用于MVP迭代、性能优化、无障碍适配及团队知识沉淀等关键场景。DecoHack #056 正是这一范式转型的典型实践,标志着Newsletter从‘读什么’迈向‘

weixin_34195546的博客 227

AI工程师能力操作系统:从模型训练到业务落地的四阶跃迁

AI工程师不是算法研究员,而是贯通数据、模型、系统与业务的复合型工程角色。其核心在于理解机器学习全生命周期原理——从数据可信度建设、模型压缩与推理优化,到MLOps可信交付与人机协作接口设计。技术价值体现在将模糊需求转化为可监控、可降级、可归因的生产服务,支撑金融风控、智能客服、预测性维护等真实场景。本文聚焦AI工程师职业成长中最具实操性的能力断层与破局路径,覆盖模型部署、MLOps、业务落地等高频搜索关键词,提供可验证的90天进阶路线。

weixin_34392435的博客 371

Android二级购物车MVP实现(布局篇)

这就是传说中的二级购物车,可能有点low,见谅。 main布局:     xmlns:app="http://schemas.android.com/apk/res-auto"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     and

小白的博客 492

Android用MVP实现的二级列表购物车

主Activity //实现view层的接口 并且重写接口的方法 public class MainActivity extends AppCompatActivity implements MainViewListener { RecyclerView third_recyclerview; LinearLayout third_pay_linear; CheckB

BoBrother的博客 1071

MVP实现购物车功能

先添加依赖: okhttp:compile 'com.squareup.okhttp3:okhttp:3.9.0' 拦截器:    compile 'com.squareup.okhttp3:logging-interceptor:3.9.0' gson: compile 'com.google.code.gson:gson:2.8.2' 拦截器依赖:'com.nostra13.unive

ASDWEEH的博客 694
上一篇: Activity向Fragment中传值
下一篇: 购物车的逻辑代码与适配器
Developer_Sir
博客等级 码龄9年 3粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值