基于Android平台开发,购物商城

1. 项目功能思维导图

在这里插入图片描述

2. 项目涉及到的技术点

  1. 使用SQLite数据库实现数据存储
  2. 使用CountDownTimer实现启动页倒计时
  3. 使用SharedPreferences实现记住密码登录
  4. 使用BottomNavigationView实现底部导航栏
  5. 使用Activity+Fragment实现底部导航栏页面之间切换
  6. 使用RecyclerView+adapter实现商品列表
  7. 使用CardView卡片控件实现头像圆角
  8. 使用AlertDialog自定义布局来实现收货地址

3. 项目截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4. 项目部分功能代码实现

  1. 底部导航栏实现
public class MainActivity extends AppCompatActivity {private HomeFragment mHomeFragment;private CarFragment mCarFragment;private OrderFragment mOrderFragment;private MineFragment mMineFragment;private BottomNavigationView mBottomNavigationView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化控件mBottomNavigationView = findViewById(R.id.bottomNavigationView);//mBottomNavigationView设置点击事件mBottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem item) {if (item.getItemId() == R.id.home) {selectedFragment(0);} else if (item.getItemId() == R.id.car) {selectedFragment(1);} else if (item.getItemId() == R.id.order) {selectedFragment(2);} else {selectedFragment(3);}return true;}});//默认首页选中selectedFragment(0);}private void selectedFragment(int position) {FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();hideFragment(fragmentTransaction);if (position == 0) {if (mHomeFragment == null) {mHomeFragment = new HomeFragment();fragmentTransaction.add(R.id.content, mHomeFragment);} else {fragmentTransaction.show(mHomeFragment);}} else if (position == 1) {if (mCarFragment == null) {mCarFragment = new CarFragment();fragmentTransaction.add(R.id.content, mCarFragment);} else {fragmentTransaction.show(mCarFragment);mCarFragment.loadData();}} else if (position == 2) {if (mOrderFragment == null) {mOrderFragment = new OrderFragment();fragmentTransaction.add(R.id.content, mOrderFragment);} else {fragmentTransaction.show(mOrderFragment);mOrderFragment.loadData();}} else {if (mMineFragment == null) {mMineFragment = new MineFragment();fragmentTransaction.add(R.id.content, mMineFragment);} else {fragmentTransaction.show(mMineFragment);}}//一定要提交fragmentTransaction.commit();}private void hideFragment(FragmentTransaction fragmentTransaction) {if (mHomeFragment != null) {fragmentTransaction.hide(mHomeFragment);}if (mCarFragment != null) {fragmentTransaction.hide(mCarFragment);}if (mOrderFragment != null) {fragmentTransaction.hide(mOrderFragment);}if (mMineFragment != null) {fragmentTransaction.hide(mMineFragment);}}
}
  1. 修改密码
public class UpdatePwdActivity extends AppCompatActivity {private EditText et_new_password;private EditText et_confirm_password;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_update_pwd);//初始化控件et_new_password =findViewById(R.id.et_new_password);et_confirm_password =findViewById(R.id.et_confirm_password);//修改密码点击事件findViewById(R.id.btn_update_pwd).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String new_pwd =et_new_password.getText().toString();String confirm_pwd =et_confirm_password.getText().toString();if (TextUtils.isEmpty(new_pwd) || TextUtils.isEmpty(confirm_pwd)){Toast.makeText(UpdatePwdActivity.this, "信息不能为空", Toast.LENGTH_SHORT).show();}else if(!new_pwd.equals(confirm_pwd)){Toast.makeText(UpdatePwdActivity.this, "新密码和确认密码不一致", Toast.LENGTH_SHORT).show();}else {UserInfo userInfo = UserInfo.getUserInfo();if (null!=userInfo){int row = UserDbHelper.getInstance(UpdatePwdActivity.this).updatePwd(userInfo.getUsername(), new_pwd);if (row>0){Toast.makeText(UpdatePwdActivity.this, "密码修改成功,请重新登录", Toast.LENGTH_SHORT).show();//回传的时候要用 startActivityForResult启动一个页面,并且在该页面要设置setResultsetResult(1000);finish();}else {Toast.makeText(UpdatePwdActivity.this, "修改失败", Toast.LENGTH_SHORT).show();}}}}});//返回findViewById(R.id.toolbar).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {finish();}});}
}
  1. 商品详情
public class ProductDetailsActivity extends AppCompatActivity {private ImageView product_img;private TextView product_title;private TextView product_price;private TextView product_details;private ProductInfo productInfo;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_product_details);//获取传递的数据productInfo = (ProductInfo) getIntent().getSerializableExtra("productInfo");//返回findViewById(R.id.toolbar).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {finish();}});//初始化控件product_img = findViewById(R.id.product_img);product_title = findViewById(R.id.product_title);product_price = findViewById(R.id.product_price);product_details = findViewById(R.id.product_details);//设置数据if (null != productInfo) {product_img.setImageResource(productInfo.getProduct_img());product_title.setText(productInfo.getProduct_title());product_details.setText(productInfo.getProduct_details());product_price.setText(productInfo.getProduct_price() + "");}//加入购物车findViewById(R.id.addCar).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new AlertDialog.Builder(ProductDetailsActivity.this).setTitle("确认是否加入到购物车?").setPositiveButton("确认", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {UserInfo userInfo = UserInfo.getUserInfo();if (userInfo != null) {//加入到购物车int row = CarDbHelper.getInstance(ProductDetailsActivity.this).addCar(userInfo.getUsername(), productInfo.getProduct_id(), productInfo.getProduct_img(), productInfo.getProduct_title(), productInfo.getProduct_price());if (row > 0) {Toast.makeText(ProductDetailsActivity.this, "添加成功", Toast.LENGTH_SHORT).show();finish();} else {Toast.makeText(ProductDetailsActivity.this, "添加失败", Toast.LENGTH_SHORT).show();}}}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}).show();}});}
}

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

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

相关文章

仕考网:非应届生可以参加公务员考试吗?

往届生有资格参加国家公务员考试。根据《公务员录用规定》,只要满足一系列资格条件,就符合报考资格。 1、年龄在18到35岁之间。 2、具备良好的品德,身体健康且心理素质稳定,拥有拟任职位所需的工作能力。 3、至少为大学专科以上…

提示词工程(Prompt Engineering)是什么?

一、定义 Prompt Engineering 提示词工程(Prompt Engineering)是一项通过优化提示词(Prompt)和生成策略,从而获得更好的模型返回结果的工程技术。 二、System message 系统指令 System message可以被广泛应用在&am…

【聚星文社】Ai小说推文一键生成工具功能预览极速版:一键出图、一键改文、一键关键帧、MJ+SD推文神器

功能预览极速版: 【三连】【关注】即可免费激活软件哦! 自动生成精彩推文:使用AI技术,一键生成精彩的小说推文,吸引读者的注意力。快速裁剪段落:根据输入的小说文本,快速裁剪出最精彩的段落&am…

Quartus快速绑定引脚

0.准备工作 首先在工程文件夹下创建pin文件夹,将生成的引脚文件保存在该文件夹下。 生成 .csv文件和 .tcl文件: (1)Pin Planner(引脚分配器) (2)File(文件&#xff09…

Ubuntu20.04系统非root用户安装GAMIT10.71

(测试环境:20240701升级包和20240701数据,解算通过) QQ:8212714 群:302883438群文件(source安装包20240701升级包) 1、首先在计算机中安装VMware Workstation 16 Pro。建议:分配…

纯CSS瀑布流

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>瀑布流布局</title> <style>/* 瀑布…

迅狐矩阵系统:一键式剪辑神器,引领矩阵运营新潮流!

在数字化浪潮汹涌的当下&#xff0c;视频内容已经成为人们获取信息、娱乐休闲的重要方式。然而&#xff0c;面对海量的视频素材和日益增长的用户需求&#xff0c;如何高效、高质量地剪辑和分发视频内容&#xff0c;成为了摆在众多内容创作者和运营团队面前的难题。幸运的是&…

【Excel】3D技术人员相见恨晚的使用技巧大全

本期作者&#xff1a;尼克 易知微3D引擎技术负责人 在项目开发或者3D创作的过程中&#xff0c;我们经常会用到Excel&#xff0c;也处理、应对了许多随之产生的突发状况&#xff0c;我把他们记录下来&#xff0c;希望能帮到更多技术人员&#xff0c;以便大家在遇到难题时&#…

昇思学习打卡-11-SSD目标检测

文章目录 模型介绍模型的特点数据采样网络结构损失函数公式实现 NMS训练过程 模型介绍 SSD是单阶段的目标检测算法&#xff0c;通过卷积神经网络进行特征提取&#xff0c;取不同的特征层进行检测输出&#xff0c;所以SSD是一种多尺度的检测方法。在需要检测的特征层&#xff0…

SQL Server 用户应当如何防范 Mallox (.hmallox) 勒索软件袭击

勒索软件领域的特点是随着时间的流逝&#xff0c;参与者群体和恶意软件家族都会大量流失&#xff0c;只有少数参与者表现出相对长寿的寿命。曾经令人担忧的威胁&#xff0c;如 REvil 和 Conti&#xff0c;要么被铲除&#xff0c;要么被解散&#xff0c;而其他威胁——例如 ALPH…

SpringBoot使用RedisTemplate、StringRedisTemplate操作Redis

前言 本文实现了在SpringBoot中集成Redis&#xff0c;使用RedisTemplate对象操作并编写了一些常用方法的工具类。 RedisTemplate和StringRedisTemplate的区别&#xff1a; 1. 两者的关系是StringRedisTemplate继承RedisTemplate。 // // Source code recreated from a .cl…

电脑突然出现“由于找不到msvcp140.dll”要怎么处理?教你科学的msvcp140.dll修复方法

电脑出现由于找不到msvcp140.dll的程序故障&#xff0c;请不要紧张&#xff0c;要解决这个问题还是比较简单的&#xff0c;当然前提是你要了解msvcp140.dll这个文件&#xff0c;只有了解了你解决起这个msvcp140.dll才会更简单&#xff01;下面我们一起来聊聊找不到msvcp140.dll…

springboot定制化书籍销售系统-计算机毕业设计源码71193

摘要 随着电子商务的快速发展和图书市场的不断变革&#xff0c;定制化书籍销售系统的需求日益凸显。本文介绍了一种基于SpringBoot框架的定制化书籍销售系统的设计与实现。该系统旨在满足用户对于个性化、专业化的书籍需求&#xff0c;为用户提供高效、便捷的定制化购书体验。 …

Spring Web MVC入门(1)(建立连接)

一.什么是Spring Web MVC? Spring Web MVC是基于ServletAPI构建的原始Web框架,从一开始就包含在Spring框架中.它的正式名称"Spring Web MVC"来自其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC". 二.MVC的定义 MVC是Model View Controller的缩…

fastadmin框架后台列表固定第一行列表固定头部

在列表中,如果列表字段很多,并且每页数量很多,往下拉的时候就不好辨别数据是哪个字段的,对用户造成不好的浏览体验。 通过以下方法,可以实现将列表的第一行,也就是头部,固定在第一行显示,这样就能轻松辨别每个数据对应是哪个字段的,增加用户的使用体验。 打开项目的…

UML图书管理系统用例图示例

新书速览|《UML 2.5基础、建模与设计实践》新书速览|《UML 2.5基础、建模与设计实践 【例4.4】图书管理系统用例图。 图书管理系统按其业务功能分成借阅者管理、图书管理、借书、还书和用户管理等几部分&#xff0c;这些职能对应于系统的不同组织部门。 1&#xff09;系统参…

即时设计初学者指南,零基础入门必看

1.1下载 即时设计目前支持个人免费使用&#xff0c;用户可以自由创建项目和文件&#xff0c;并邀请团队成员在线合作。即时设计支持网页端、macOS、Windows、Linux、iOS、Android 和微信小程序 1.2 安装 进入即时设计官网&#xff0c;点击免费使用即时设计或进入工作台&#…

基于conda包的环境创建、激活、管理与删除

Conda 是一个开源的包管理和环境管理系统。 很多不同的项目可能需要使用不同的环境。例如某个项目需要使用pytorch1.6&#xff0c;另一个项目需要使用pytorch1.8&#xff0c;那么conda包就可以创建两个虚拟环境&#xff0c;分别配置不同的资源&#xff0c;需要使用哪些资源就去…

14-52 剑和诗人26 - RAG 和 VectorDB 简介

检索增强生成 (RAG) 和 VectorDB 是自然语言处理 (NLP) 中的两个重要概念&#xff0c;它们正在突破 AI 系统所能实现的界限。 在这篇博文中&#xff0c;我将深入探讨 RAG&#xff0c;探索其工作原理、应用、优势和局限性。 我们还将研究 VectorDB&#xff0c;这是一种专用于向…

9月Sui Builder House新加坡站开启报名

本次以建设者为主的活动包括&#xff1a; 与Sui社区互动的机会庆祝Sui生态成就的时刻公布和发布新产品建设者学习、网络交流、分享和启动新项目的机会 该活动与Token2049新加坡同期进行&#xff0c;Token2049是一个全球性会议系列&#xff0c;汇集加密货币的决策者们交换想法…