Android安卓实战项目(7)---购物APP(源码在文末)

news2024/12/24 2:45:40

Android安卓实战项目(7)—购物APP(源码在文末🐕🐕🐕)

一.项目运行介绍

【bilibili展示】 https://www.bilibili.com/video/BV1xh4y1C7o1/?share_source=copy_web&vd_source=b2e9b9ed746acda34f499009647748ed
image-20230802210702673

image-20230802210748129

image-20230802210845042

image-20230802210905575

image-20230802211130027

image-20230802211227216

二.具体实现

(1)商品的实现类

Goods.java
package com.ronglin.linshopping.application;


import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import com.ronglin.linshopping.R;

import java.io.InputStream;
import java.lang.annotation.Retention;
import java.util.ArrayList;
import java.util.Arrays;

public class Goods {
    private ArrayList<Bitmap> bitmaps;
    private String goodsName;
    private String describe;
    private ArrayList<String> tags;
    private int price;

    public static ArrayList<Goods> GOODSLIST =new ArrayList<>();
    public static Goods DEULT_GOODS = new Goods();

    public Goods(){
        this.bitmaps = new ArrayList<>();
        this.goodsName = "";
        this.describe = "";
        this.tags = new ArrayList<>();
        this.price = -1;
    }

    public Goods(String goodsName, String describe, String[] tags, int price){
        this();
        this.goodsName = goodsName;
        this.describe = describe;
        this.price = price;
        this.tags.addAll(Arrays.asList(tags));
    }

    public ArrayList<Bitmap> getBitmaps() {
        return bitmaps;
    }

    public void setBitmaps(ArrayList<Bitmap>  bitmaps) {
        this.bitmaps = bitmaps;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    public String getDescribe() {
        return describe;
    }

    public void setDescribe(String describe) {
        this.describe = describe;
    }

    public ArrayList<String> getTags() {
        return tags;
    }

    public void setTags(ArrayList<String> tags) {
        this.tags = tags;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public boolean equals(Goods goods){
        return this.getGoodsName().equals(goods.getGoodsName())
                && this.getTags().equals(goods.getTags())
                && this.getDescribe().equals(goods.getDescribe())
                && this.getPrice() == goods.getPrice();
    }

    public static String toPriceString(int price){
        StringBuffer sb = new StringBuffer(String.valueOf(price));
        //小于2位数
        if (sb.length()<=2)
        {
            if (sb.length() == 0){
                sb.insert(0,"0.00");
            } else if(sb.length() == 1){
                sb.insert(0,"0.0");
            } else if(sb.length() == 2){
                sb.insert(0,"0.");
            }
        } else {
            sb.insert(sb.length()-2,'.');
        }
        return sb.toString();
    }

    public static void getDefaultGoodsList(Context context){

        GOODSLIST.clear();
        Goods goods1 = new Goods("老乡鸡人字拖","夏季人字拖,清凉一夏",new String[]{"板鞋","凉鞋","人字拖"},50000);
        goods1.setDescribe("夏季人字拖,清凉一夏,夏季人字拖,清凉一夏,夏季人字拖,清凉一夏,夏季人字拖,清凉一夏,夏季人字拖,清凉一夏");
        Goods goods2 = new Goods("鸿星尔克大凉鞋","冬季凉鞋,清凉透气",new String[]{"凉鞋","人字拖"},15000);
        goods2.setDescribe("冬季凉鞋,清凉透气,冬季凉鞋,清凉透气,冬季凉鞋,清凉透气,冬季凉鞋,清凉透气,冬季凉鞋,清凉透气,冬季凉鞋,清凉透气");
        Goods goods3 = new Goods("蜜雪冰城小皮靴","冬季皮靴,保暖保温",new String[]{"毛绒"},1500);
        goods3.setDescribe("冬季皮靴,保暖保温,冬季皮靴,保暖保温,冬季皮靴,保暖保温,冬季皮靴,保暖保温,冬季皮靴,保暖保温,冬季皮靴,保暖保温");
        Goods goods4 = new Goods("沙县国际大酒店大拖鞋","应急拖鞋,紧急备用",new String[]{"凉鞋"},100);
        goods4.setDescribe("应急拖鞋,紧急备用,应急拖鞋,紧急备用,应急拖鞋,紧急备用,应急拖鞋,紧急备用,应急拖鞋,紧急备用,应急拖鞋,紧急备用");

        ArrayList<Bitmap> bitmaps1 = new ArrayList<>();
        bitmaps1.add(BitmapFactory.decodeResource(context.getResources(), R.drawable.renzituo));
        goods1.setBitmaps(bitmaps1);

        ArrayList<Bitmap> bitmaps2 = new ArrayList<>();
        bitmaps2.add(BitmapFactory.decodeResource(context.getResources(), R.drawable.liangxie));
        goods2.setBitmaps(bitmaps2);

        ArrayList<Bitmap> bitmaps3 = new ArrayList<>();
        bitmaps3.add(BitmapFactory.decodeResource(context.getResources(), R.drawable.pixue));
        goods3.setBitmaps(bitmaps3);

        ArrayList<Bitmap> bitmaps4 = new ArrayList<>();
        bitmaps4.add(BitmapFactory.decodeResource(context.getResources(), R.drawable.tuoxie));
        goods4.setBitmaps(bitmaps4);


        GOODSLIST.add(goods1);
        GOODSLIST.add(goods2);
        GOODSLIST.add(goods3);
        GOODSLIST.add(goods4);
    }

}

这段代码是一个名为Goods的Java类,它表示一个用于处理不同商品信息的模型或数据结构。它包含属性和方法,用于存储和操作商品的名称、描述、标签、价格和图片等信息。

详细解释如下:

  1. 属性:

    • bitmaps:一个存储Bitmap对象的ArrayList。它用于保存与商品相关的图片。
    • goodsName:一个表示商品名称的字符串。
    • describe:一个包含商品描述的字符串。
    • tags:一个存储商品标签或类别的字符串ArrayList。
    • price:一个整数,表示商品的价格。
  2. 静态属性:

    • GOODSLIST:一个静态的Goods对象ArrayList。它表示一个列表,存储不同Goods对象的实例。
    • DEULT_GOODS:一个静态的Goods实例,用作在创建新实例时不指定具体值时的默认对象。构造函数初始化此对象的属性为默认值或空值。
  3. 构造函数:

    • Goods():默认构造函数,用于初始化属性为默认值。
    • Goods(String goodsName, String describe, String[] tags, int price):带参数的构造函数,接受商品名称、描述、标签和价格的值,并初始化相应的属性。
  4. Getter和Setter方法:
    该类为每个属性提供了Getter和Setter方法,以便访问和修改数据。

  5. equals方法:
    equals方法被重写,用于基于属性(goodsName、tags、describe和price)比较两个Goods对象的相等性。

  6. toPriceString方法:
    这是一个静态方法,接受一个整数price,并将其转换为格式化后的价格字符串。例如,如果价格为50000,它将返回"500.00"。

  7. getDefaultGoodsList方法:
    这是一个静态方法,用于使用一些默认的Goods对象填充GOODSLIST ArrayList。它接受一个Context参数,用于检索与商品相关的图像资源。该方法创建四个Goods实例,具有不同的属性,包括名称、描述、标签和价格。它还使用图像资源设置了每个商品对象的关联位图。最后,它将这些Goods对象添加到GOODSLIST ArrayList。

(2)购物车的实现

BuyingListAdapter.java
package com.ronglin.linshopping.application;

import android.annotation.SuppressLint;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.ronglin.linshopping.GoodsDialog;
import com.ronglin.linshopping.R;

import java.util.ArrayList;

public class BuyingListAdapter extends BaseAdapter {
    private ArrayList<Goods> list_goods ;
    private final Context context;

    public BuyingListAdapter(ArrayList<Goods> list,Context context){
        this.list_goods = list;
        this.context = context;
    }

    public void setListGoods(ArrayList<Goods> list){
        this.list_goods = list;
    }

    @Override
    public int getCount() {
        return list_goods.size();
    }

    @Override
    public Object getItem(int i) {
        return list_goods.get(i);
    }

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

    @SuppressLint("ViewHolder")
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        @SuppressLint("ViewHolder") View item_view;
        item_view = View.inflate(this.context, R.layout.list_item_buying,null);

        ImageView imageViewPreviewBuying = item_view.findViewById(R.id.imageViewPreviewBuying);
        TextView textViewGoodsNameBuying = item_view.findViewById(R.id.textViewGoodsNameBuying);
        TextView textViewGoodsPriceBuying = item_view.findViewById(R.id.textViewGoodsPriceBuying);

        item_view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                GoodsDialog dialog = new GoodsDialog(context,list_goods.get(i));
                dialog.show();
            }
        });

        String t="-"+Goods.toPriceString(list_goods.get(i).getPrice());
        textViewGoodsPriceBuying.setText(t);

        textViewGoodsNameBuying.setText(list_goods.get(i).getGoodsName());

        if (list_goods.get(i).getBitmaps().size() > 0){
            imageViewPreviewBuying.setImageBitmap(list_goods.get(i).getBitmaps().get(0));
        }


        return item_view;
    }
}

这段代码是一个自定义的适配器类BuyingListAdapter,用于在Android应用程序中展示购买商品的列表。适配器继承自BaseAdapter类,并实现了相关的方法来处理列表数据的显示和交互。

详细解释如下:

  1. 属性:

    • list_goods: 一个存储Goods对象的ArrayList,表示购买商品的列表。
    • context: 一个Context对象,用于获取当前上下文信息。
  2. 构造函数:

    • BuyingListAdapter(ArrayList<Goods> list, Context context): 构造函数,接受购买商品列表list和上下文context作为参数,并将其分配给适配器的属性。
  3. 方法:

    • setListGoods(ArrayList<Goods> list): 设置购买商品列表的方法,用于更新list_goods属性。
  4. getCount()方法:

    • 重写BaseAdapter中的getCount()方法,返回购买商品列表的项数。
  5. getItem(int i)方法:

    • 重写BaseAdapter中的getItem(int i)方法,返回购买商品列表指定位置的Goods对象。
  6. getItemId(int i)方法:

    • 重写BaseAdapter中的getItemId(int i)方法,返回指定位置的商品项的ID。
  7. getView(int i, View view, ViewGroup viewGroup)方法:

    • 重写BaseAdapter中的getView(int i, View view, ViewGroup viewGroup)方法,用于获取每个商品项的视图,并在列表中显示。
    • 在方法内部,使用View.inflate()方法将自定义的R.layout.list_item_buying布局文件解析为View对象,并分配给item_view
    • 通过item_view.findViewById()方法获取布局文件中的ImageView和TextView视图。
    • 将购买商品的名称、价格和预览图设置到相应的TextView和ImageView中。
    • 为每个商品项的item_view添加点击事件监听器,在点击时弹出对话框显示商品的详细信息。
  8. 点击事件监听器:

    • 当用户点击商品项时,会创建一个GoodsDialog对话框,并将点击的商品信息传递给对话框的构造函数。
    • GoodsDialog是一个自定义的对话框类,可能用于显示商品详细信息和购买选项。

这段代码定义了一个适配器类,用于将购买商品的列表数据显示在Android应用程序的列表视图中。每个商品项由布局文件list_item_buying定义,包含商品名称、价格和预览图。用户可以点击商品项,在对话框中查看该商品的详细信息。

三.项目源码

链接:https://pan.baidu.com/s/1EThccBhTIY2d-nzFo2OUjQ?pwd=jynl
提取码:jynl

这个项目的话,文件已加密,联系作者得密码,有偿(包括项目改进,技术文档,实验报告)

V:15135757306

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/827876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统安装部署MongoDB完整教程(图文详解)

前言&#xff1a;本期给大家分享一下目前最新Linux系统安装部署MongoDB完整教程&#xff0c;我的服务器采用的是Centos7&#xff0c;在部署之前我重装了我的服务器&#xff0c;目的是为了干净整洁的给大家演示我是如何一步步的操作的&#xff0c;整体部署还是挺简洁&#xff0c…

Vue3基础知识(待续)

Vue是什么 构用户界面的js的渐进式框架&#xff0c;基于htlm、css、js&#xff0c;并提供声明式组件化的编程模型&#xff0c;帮你高效开发用户界面。无论简单或复杂的界面Vue都可以胜任。 vue是一个框架&#xff0c;同时也是一个生态。因为有很多程序员支持vue&#xff0c;开…

【Python】Web学习笔记_flask(4)——钩子函数

钩子函数可以用来注册在请求处理的不同阶段执行出 Flask的请求钩子指的是在执行视图函数前后执行的一些函数&#xff0c; 之前是有4种&#xff0c;但是 before_first_request已经被删除了&#xff0c;使用时会报错 before_request&#xff1a;在每次请求前执行&#xff0c;…

Arc A770M的蝰蛇峡谷迷你电脑主机值得入手吗?

相比于已经走上正轨的NUC迷你电脑产品&#xff0c;英特尔的独显&#xff0c;特别是最新一代Arc&#xff08;锐炫&#xff09;还是犹抱琵琶半遮面。通过蝰蛇峡谷NUC&#xff0c;它算是正式亮相了。 这里的Serpent Canyon是英特尔NUC系列的最新产品。它在NUC 12 Enthusiast版本中…

高级C语言

1.day1 1、mobaxterm使用 1、更方便的使用虚拟机终端&#xff1b; 2、新建一个终端&#xff0c;CTRL SHIFT U; 3、清屏&#xff0c;CTRL L; 2、gdb调试 参考《gdb调试器练习》 2.day2 3.day3 1、vin自动生成main函数 1&#xff09;打开vim的配置文件&#xff1b; s…

【开源源码学习】

C 迷你高尔夫 一款打高尔夫的游戏。亮点是碰撞反应和关卡设计。 GitHub - mgerdes/Open-Golf: A cross-platform minigolf game written in C. TypeScript 俄罗斯方块 复刻经典的俄罗斯方块&#xff0c;项目采用ReactReduxImmutable的技术栈。 GitHub - chvin/react-tetr…

【Web】基于C#的学生选课系统开发

目录 一、实验目的二、设计数据库表三、设计学生、课程和已选课程类四、 系统流程图五、功能流程图六、总结 一、实验目的 1、设计学生类&#xff08;学号 | 姓名 | 班级 | 初始密码&#xff09; 2、设计课程类&#xff08;课程代码 | 课程名称 | 学分&#xff09; 3、设计已选…

HTML5 Canvas(画布)

<canvas>标签定义图形&#xff0c;比如图表和其他图像&#xff0c;你必须用脚本来绘制图形。 在画布上&#xff08; Canvas &#xff09;画一个共红色矩形&#xff0c;渐变矩形&#xff0c;彩色矩形&#xff0c;和一些彩色文字。 什么是 Canvas&#xff1f; HTML5<c…

数据库的分库分表

#!/bin/bash ######################### #File name:db_fen.sh #Version:v1.0 #Email:admintest.com #Created time:2023-07-29 09:18:52 #Description: ########################## MySQL连接信息 db_user"root" db_password"RedHat123" db_cmd"-u${…

linux安装Tomcat及部署jpress的详细教程!!!

一、YUM在线安装 1、查看Tomcat相关安装包 [rootlocalhost ~]# yum list | grep tomcat tomcat.noarch 7.0.76-16.el7_9 updates tomcat-admin-webapps.noarch 7.0.76-16.el7_9 updates tomcat-docs…

msvcr100.dll丢失的解决方法?三招解决msvcr100.dll丢失问题

最近我遇到了一个电脑问题&#xff0c;就是在运行某个软件时提示缺少msvcr100.dll文件。起初我并不知道这个文件是什么&#xff0c;也不知道它的作用&#xff0c;但通过一番搜索和了解&#xff0c;我对这个问题有了更深的理解&#xff0c;并且也得到了解决的办法。 解决方法一&…

分享学习java过程中遇到的一些网址

*****JavaWeb视频教程***** https://www.bilibili.com/video/BV1m84y1w7Tb?p4&spm_id_frompageDriver&vd_source841fee104972680a6cac4dbdbf144b50*****Java前端官网教程&#xff08;HTML、CSS、JS)***** https://www.w3school.com.cn/html/index.asp*****VS Code官网…

阶段性实验汇总

文章目录 前言一、实验目的与要求1.目的2.要求 二、实验拓扑三、实验步骤1.阅读实验拓扑2.配置基础环境3.配置DHCP及其中继服务器&#xff08;一&#xff09;DHCP主服务器&#xff08;二&#xff09;DHCP中继服务器(三)登录客户端验证 4.配置DNS服务器&#xff08;一&#xff0…

faac内存开销较大,为方便嵌入式设备使用进行优化(valgrind使用)

faac内存开销较大&#xff0c;为方便嵌入式设备使用进行优化&#xff0c;在github上提了issues但是没人理我&#xff0c;所以就搞一份代码自己玩吧。 基于faac_1_30版本&#xff0c;原工程https://github.com/knik0/faac faac内存优化: faac内存开销较大&#xff0c;为方便嵌入…

RS232转Profinet网关rs232转网口需要如何设置

大家好&#xff0c;今天我要给大家带来一个很有意思的案例分享。你们猜猜&#xff0c;这回我们要用捷米的一款神奇的网关JM-RS485/232-PN做什么呢&#xff1f;没错&#xff0c;我们要把一台扫码枪设备通过这个RS232转PROFINET网关&#xff0c;接入到一台西门子S7-1200PLC的Prof…

无涯教程-Lua - for语句函数

for 循环是一种重复控制结构&#xff0c;可让您有效地编写需要执行特定次数的循环。 for loop - 语法 Lua编程语言中 for 循环的语法如下- for init,max/min value, increment dostatement(s) end 这是 for 循环中的控制流程- 首先执行 init 步骤&#xff0c;并且仅执行一…

DT MAYA绑定

设置另外一边 控制器 结果 根骨骼 // 错误: line 0: 未应用冻结变换&#xff0c;因为 curve4.scaleX 被锁定。 骨骼旋转 轴向

关于latch up的重读

衬底电流容易导致寄生三极管导通(衬底电阻衬底电流》衬底压差)&#xff0c;更容易触发latchup&#xff1b; 一般常用的实际产品中会用衬底隔离的器件来做负压器件&#xff1b;用DNW&NBL组成一个隔离盆将整个负压区和正常电路分开&#xff0c;DNW&NBL接高电压&#xff1…

【福建事业单位-语言理解】03 语序选择-填空-接语

【福建事业单位-语言理解】03 语序选择-填空-接语 一、语句排序1.1 确定首句1.2 确定捆绑集团/确定局部顺序/确定尾句1.3确定尾句总结 二、语句填空题句子首句&#xff08;概括下文&#xff09;句尾&#xff08;总结前文/提对策&#xff09;句中&#xff08;承上启下&#xff0…

spring-bean配置信息重用(继承)和bean创建顺序是什么以及bean 对象的单例和多例讲解

&#x1f600;前言 本章是spring基于XML 配置bean系类中第5篇讲解spring-bean配置信息重用(继承)和bean创建顺序是什么以及bean 对象的单例和多例讲解 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希…