IT评测·应用市场-qidao123.com

标题: 基于Android Studio如何实现 购物商城 案例(简朴易上手) [打印本页]

作者: 梦见你的名字    时间: 2024-6-24 22:07
标题: 基于Android Studio如何实现 购物商城 案例(简朴易上手)
一、高质量源码(非开源,白嫖低价勿扰)

   
关注公众号:《编程乐学》

   
配景复兴:23102801

    同款低价传送链接(仅16.6¥):

  网络资源模板--基于 Android Studio 实现的水果商城App-CSDN博客
    这是一个使用Android Studio和Java开辟的购物商城应用。该应用旨在提供用户一个方便、快捷的购物体验。通过该应用,用户可以浏览差别类别的商品,并将其添加到购物车中。用户可以检察商品的详细信息,包括价格等。购物商城应用还提供了用户注册和登录功能,以便用户可以保存个人信息。该应用还支持商品搜索功能,帮助用户快速找到所需商品。购物商城应用的界面简洁、直观,操作易于上手,为用户提供了一个愉快的购物体验。


目次
一、项目概述
1、构成以及功能设计
二、开辟环境
三、准备工具
四、详细设计
1、新建工程
2、搭建启动页面
3、搭建注册、登陆界面
4、搭建主页界面
5、搭建购物车界面
6、搭建我的页面
五、项目运行
1.图片演示
2.视频演示
六、项目总结
七、源码下载

项目视频先容

     Android studio期末设计大作业~购物商城App
  一、项目概述

1、构成以及功能设计

①启动页
②.用户登录/注册功能
③主页面功能
    - 顶部轮播图功能
    - 搜索功能
    - 商品目次
    - 商品列表
    -点击商品列表进入详情页
④ 购物车功能
    - 商品数量的增加淘汰
    - 商品付出购买
⑤ 我的页面
    - 修改用户暗码
⑥详情页面
   - 表现商品详情信息

二、开辟环境

        我的开辟环境如下,大家的AS版本不需要和我相同,只要是近两年从官网下载的版本,都是比4.0.0高的,是可以满足运行和开辟要求的。

三、准备工具

四、详细设计

1、新建工程



2、搭建启动页面

  我们来看一下activity_start布局文件。

        启动页面xml完整代码如下:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"
  4.     xmlns:tools="http://schemas.android.com/tools"
  5.     android:layout_width="match_parent"
  6.     android:layout_height="match_parent"
  7.     android:background="#ead6b6"
  8.     tools:context=".Start.StartActivity">
  9.     <ImageView
  10.         android:id="@+id/imageView"
  11.         android:layout_width="300dp"
  12.         android:layout_height="300dp"
  13.         app:layout_constraintBottom_toBottomOf="parent"
  14.         app:layout_constraintEnd_toEndOf="parent"
  15.         app:layout_constraintStart_toStartOf="parent"
  16.         app:layout_constraintTop_toTopOf="parent"
  17.         app:srcCompat="@drawable/logo" />
  18. </androidx.constraintlayout.widget.ConstraintLayout>
复制代码
         然后回到我们的Activity文件。起首创建一个ImageView控件 然后进行页面配景颜色修改。
启动页面代码如下:
  1. package com.android.newshop.Start;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.os.CountDownTimer;
  5. import android.os.Handler;
  6. import android.widget.Button;
  7. import android.widget.ImageView;
  8. import androidx.appcompat.app.AppCompatActivity;
  9. import com.android.newshop.Login.LoginActivity;
  10. import com.android.newshop.R;
  11. public class StartActivity extends AppCompatActivity {
  12.     private ImageView imageView2;
  13.     private Button button;
  14.     private Runnable runnable = new Runnable() {
  15.         @Override
  16.         public void run() {
  17.             tomainActive();
  18.         }
  19.     };
  20.     // 进入主页面
  21.     private void tomainActive() {
  22.         startActivity(new Intent(this, LoginActivity.class));
  23.         // 跳转完成后注销
  24.         finish();
  25.     }
  26.     @Override
  27.     protected void onCreate(Bundle savedInstanceState) {
  28.         super.onCreate(savedInstanceState);
  29.         setContentView(R.layout.activity_start);
  30.       
  31.     }
  32.     // 计时器
  33.     class TimeCount extends CountDownTimer {
  34.         public TimeCount(long millisInFuture, long countDownInterval) {
  35.             super(millisInFuture, countDownInterval);
  36.         }
  37.         @Override
  38.         public void onTick(long l) {
  39.         }
  40.         @Override
  41.         public void onFinish() {
  42.            
  43.         }
  44.     }
  45. }
复制代码
3、搭建注册、登陆界面

        重要实现用户数据的存储,实现用户使用注册的账号进行登陆。


注册页面xml代码如下所示:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"
  4.     xmlns:tools="http://schemas.android.com/tools"
  5.     android:layout_width="match_parent"
  6.     android:layout_height="match_parent"
  7.     android:background="#ead6b6"
  8.     tools:context=".Register.RegisterActivity">
  9.     <ImageView
  10.         android:id="@+id/imageView3"
  11.         android:layout_width="200dp"
  12.         android:layout_height="150dp"
  13.         android:layout_marginTop="40dp"
  14.         app:layout_constraintEnd_toEndOf="parent"
  15.         app:layout_constraintStart_toStartOf="parent"
  16.         app:layout_constraintTop_toTopOf="parent"
  17.         app:srcCompat="@drawable/logo" />
  18.     <View
  19.         android:id="@+id/view2"
  20.         android:layout_width="0dp"
  21.         android:layout_height="300dp"
  22.         android:background="@drawable/login_view"
  23.         app:layout_constraintBottom_toBottomOf="parent"
  24.         app:layout_constraintEnd_toStartOf="@+id/guideline4"
  25.         app:layout_constraintHorizontal_bias="0.0"
  26.         app:layout_constraintStart_toStartOf="@+id/guideline"
  27.         app:layout_constraintTop_toTopOf="@+id/imageView3"
  28.         app:layout_constraintVertical_bias="0.501" />
  29.     <View
  30.         android:id="@+id/view3"
  31.         android:layout_width="250dp"
  32.         android:layout_height="45dp"
  33.         android:layout_marginTop="32dp"
  34.         android:background="@drawable/login_count"
  35.         app:layout_constraintEnd_toStartOf="@+id/guideline4"
  36.         app:layout_constraintStart_toStartOf="@+id/view2"
  37.         app:layout_constraintTop_toTopOf="@+id/view2" />
  38.     <View
  39.         android:id="@+id/view4"
  40.         android:layout_width="0dp"
  41.         android:layout_height="45dp"
  42.         android:layout_marginTop="32dp"
  43.         android:background="@drawable/login_count"
  44.         app:layout_constraintEnd_toEndOf="@+id/view3"
  45.         app:layout_constraintStart_toStartOf="@+id/view3"
  46.         app:layout_constraintTop_toBottomOf="@+id/view3" />
  47.     <androidx.constraintlayout.widget.Guideline
  48.         android:id="@+id/guideline"
  49.         android:layout_width="wrap_content"
  50.         android:layout_height="wrap_content"
  51.         android:orientation="vertical"
  52.         app:layout_constraintGuide_percent="0.1" />
  53.     <androidx.constraintlayout.widget.Guideline
  54.         android:id="@+id/guideline4"
  55.         android:layout_width="wrap_content"
  56.         android:layout_height="wrap_content"
  57.         android:orientation="vertical"
  58.         app:layout_constraintGuide_percent="0.9" />
  59.     <ImageView
  60.         android:id="@+id/imageView"
  61.         android:layout_width="20dp"
  62.         android:layout_height="20dp"
  63.         android:layout_marginStart="8dp"
  64.         app:layout_constraintBottom_toBottomOf="@+id/view3"
  65.         app:layout_constraintStart_toStartOf="@+id/view3"
  66.         app:layout_constraintTop_toTopOf="@+id/view3"
  67.         app:srcCompat="@drawable/mima" />
  68.     <ImageView
  69.         android:id="@+id/imageView4"
  70.         android:layout_width="20dp"
  71.         android:layout_height="20dp"
  72.         app:layout_constraintBottom_toBottomOf="@+id/view4"
  73.         app:layout_constraintStart_toStartOf="@+id/imageView"
  74.         app:layout_constraintTop_toTopOf="@+id/view4"
  75.         app:srcCompat="@drawable/zhanghao" />
  76.     <Button
  77.         android:id="@+id/register_button"
  78.         android:layout_width="250dp"
  79.         android:layout_height="55dp"
  80.         android:layout_marginBottom="32dp"
  81.         android:background="@drawable/login"
  82.         android:text="立 即 注 册"
  83.         app:layout_constraintBottom_toBottomOf="@+id/view2"
  84.         app:layout_constraintEnd_toEndOf="@+id/view2"
  85.         app:layout_constraintHorizontal_bias="0.506"
  86.         app:layout_constraintStart_toStartOf="@+id/view2" />
  87.     <EditText
  88.         android:id="@+id/username_edittext"
  89.         android:layout_width="190dp"
  90.         android:layout_height="0dp"
  91.         android:layout_marginStart="5dp"
  92.         android:background="#eff4f2"
  93.         android:ems="10"
  94.         android:hint="请输入账号"
  95.         android:inputType="textPersonName"
  96.         app:layout_constraintBottom_toBottomOf="@+id/view3"
  97.         app:layout_constraintStart_toEndOf="@+id/imageView"
  98.         app:layout_constraintTop_toTopOf="@+id/view3" />
  99.     <EditText
  100.         android:id="@+id/password_edittext"
  101.         android:layout_width="190dp"
  102.         android:layout_height="0dp"
  103.         android:layout_marginStart="5dp"
  104.         android:background="#eff4f2"
  105.         android:ems="10"
  106.         android:hint="请输入密码"
  107.         android:inputType="textPassword"
  108.         app:layout_constraintBottom_toBottomOf="@+id/view4"
  109.         app:layout_constraintStart_toEndOf="@+id/imageView4"
  110.         app:layout_constraintTop_toTopOf="@+id/view4" />
  111.     <TextView
  112.         android:id="@+id/tv_login"
  113.         android:layout_width="wrap_content"
  114.         android:layout_height="wrap_content"
  115.         android:layout_marginBottom="8dp"
  116.         android:text="已有账号,立即登录"
  117.         app:layout_constraintBottom_toTopOf="@+id/register_button"
  118.         app:layout_constraintEnd_toEndOf="@+id/view4"
  119.         app:layout_constraintTop_toBottomOf="@+id/view4" />
  120. </androidx.constraintlayout.widget.ConstraintLayout>
复制代码
登陆页面xml代码如下:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"
  4.     xmlns:tools="http://schemas.android.com/tools"
  5.     android:layout_width="match_parent"
  6.     android:layout_height="match_parent"
  7.     android:background="#ead6b6"
  8.     tools:context=".Login.LoginActivity">
  9.     <ImageView
  10.         android:id="@+id/imageView3"
  11.         android:layout_width="200dp"
  12.         android:layout_height="150dp"
  13.         android:layout_marginTop="24dp"
  14.         app:layout_constraintEnd_toEndOf="parent"
  15.         app:layout_constraintStart_toStartOf="parent"
  16.         app:layout_constraintTop_toTopOf="parent"
  17.         app:srcCompat="@drawable/logo" />
  18.     <View
  19.         android:id="@+id/view2"
  20.         android:layout_width="0dp"
  21.         android:layout_height="320dp"
  22.         android:layout_marginTop="24dp"
  23.         android:background="@drawable/login_view"
  24.         app:layout_constraintEnd_toStartOf="@+id/guideline2"
  25.         app:layout_constraintStart_toStartOf="@+id/guideline3"
  26.         app:layout_constraintTop_toBottomOf="@+id/imageView3" />
  27.     <Button
  28.         android:id="@+id/login_button"
  29.         android:layout_width="250dp"
  30.         android:layout_height="55dp"
  31.         android:layout_marginBottom="32dp"
  32.         android:background="@drawable/login"
  33.         android:text="立 即 登 录 "
  34.         android:textColor="#fff"
  35.         android:textSize="24sp"
  36.         app:layout_constraintBottom_toBottomOf="@+id/view2"
  37.         app:layout_constraintEnd_toStartOf="@+id/guideline2"
  38.         app:layout_constraintStart_toStartOf="@+id/view2" />
  39.     <androidx.constraintlayout.widget.Guideline
  40.         android:id="@+id/guideline2"
  41.         android:layout_width="wrap_content"
  42.         android:layout_height="wrap_content"
  43.         android:orientation="vertical"
  44.         app:layout_constraintGuide_percent="0.9" />
  45.     <androidx.constraintlayout.widget.Guideline
  46.         android:id="@+id/guideline3"
  47.         android:layout_width="wrap_content"
  48.         android:layout_height="wrap_content"
  49.         android:orientation="vertical"
  50.         app:layout_constraintGuide_percent="0.1" />
  51.     <View
  52.         android:id="@+id/view3"
  53.         android:layout_width="0dp"
  54.         android:layout_height="45dp"
  55.         android:layout_marginTop="40dp"
  56.         android:background="@drawable/login_count"
  57.         app:layout_constraintEnd_toEndOf="@+id/login_button"
  58.         app:layout_constraintStart_toStartOf="@+id/login_button"
  59.         app:layout_constraintTop_toTopOf="@+id/view2" />
  60.     <View
  61.         android:id="@+id/view4"
  62.         android:layout_width="0dp"
  63.         android:layout_height="45dp"
  64.         android:layout_marginTop="24dp"
  65.         android:background="@drawable/login_count"
  66.         app:layout_constraintEnd_toEndOf="@+id/login_button"
  67.         app:layout_constraintHorizontal_bias="0.0"
  68.         app:layout_constraintStart_toStartOf="@+id/login_button"
  69.         app:layout_constraintTop_toBottomOf="@+id/view3" />
  70.     <TextView
  71.         android:id="@+id/textView"
  72.         android:layout_width="wrap_content"
  73.         android:layout_height="wrap_content"
  74.         android:layout_marginTop="24dp"
  75.         android:text="忘 记 密 码"
  76.         app:layout_constraintStart_toStartOf="@+id/view4"
  77.         app:layout_constraintTop_toBottomOf="@+id/view4" />
  78.     <TextView
  79.         android:id="@+id/login_register"
  80.         android:layout_width="wrap_content"
  81.         android:layout_height="wrap_content"
  82.         android:text="立 即 注 册"
  83.         app:layout_constraintBottom_toBottomOf="@+id/textView"
  84.         app:layout_constraintEnd_toEndOf="@+id/view4"
  85.         app:layout_constraintTop_toTopOf="@+id/textView" />
  86.     <ImageView
  87.         android:id="@+id/imageView"
  88.         android:layout_width="20dp"
  89.         android:layout_height="20dp"
  90.         app:layout_constraintBottom_toBottomOf="@+id/view4"
  91.         app:layout_constraintEnd_toEndOf="@+id/imageView4"
  92.         app:layout_constraintTop_toTopOf="@+id/view4"
  93.         app:srcCompat="@drawable/mima" />
  94.     <ImageView
  95.         android:id="@+id/imageView4"
  96.         android:layout_width="20dp"
  97.         android:layout_height="20dp"
  98.         android:layout_marginStart="16dp"
  99.         app:layout_constraintBottom_toBottomOf="@+id/view3"
  100.         app:layout_constraintStart_toStartOf="@+id/view3"
  101.         app:layout_constraintTop_toTopOf="@+id/view3"
  102.         app:srcCompat="@drawable/zhanghao" />
  103.     <View
  104.         android:id="@+id/view5"
  105.         android:layout_width="100dp"
  106.         android:layout_height="1dp"
  107.         android:layout_marginTop="40dp"
  108.         android:background="#fff"
  109.         app:layout_constraintStart_toStartOf="@+id/guideline3"
  110.         app:layout_constraintTop_toBottomOf="@+id/view2" />
  111.     <View
  112.         android:id="@+id/view6"
  113.         android:layout_width="100dp"
  114.         android:layout_height="1dp"
  115.         android:background="#fff"
  116.         app:layout_constraintEnd_toStartOf="@+id/guideline2"
  117.         app:layout_constraintTop_toTopOf="@+id/view5" />
  118.     <TextView
  119.         android:id="@+id/textView3"
  120.         android:layout_width="wrap_content"
  121.         android:layout_height="wrap_content"
  122.         android:text="其它方式登陆"
  123.         android:textColor="#fff"
  124.         app:layout_constraintBottom_toBottomOf="@+id/view5"
  125.         app:layout_constraintEnd_toStartOf="@+id/view6"
  126.         app:layout_constraintStart_toEndOf="@+id/view5"
  127.         app:layout_constraintTop_toTopOf="@+id/view5" />
  128.     <ImageView
  129.         android:id="@+id/imageView6"
  130.         android:layout_width="30dp"
  131.         android:layout_height="30dp"
  132.         app:layout_constraintBottom_toBottomOf="@+id/imageView5"
  133.         app:layout_constraintEnd_toStartOf="@+id/imageView7"
  134.         app:layout_constraintStart_toEndOf="@+id/imageView5"
  135.         app:layout_constraintTop_toTopOf="@+id/imageView5"
  136.         app:srcCompat="@drawable/qq" />
  137.     <ImageView
  138.         android:id="@+id/imageView5"
  139.         android:layout_width="30dp"
  140.         android:layout_height="30dp"
  141.         android:layout_marginStart="70dp"
  142.         android:layout_marginTop="24dp"
  143.         app:layout_constraintStart_toStartOf="@+id/guideline3"
  144.         app:layout_constraintTop_toBottomOf="@+id/view5"
  145.         app:srcCompat="@drawable/weixin" />
  146.     <ImageView
  147.         android:id="@+id/imageView7"
  148.         android:layout_width="30dp"
  149.         android:layout_height="30dp"
  150.         android:layout_marginEnd="70dp"
  151.         app:layout_constraintBottom_toBottomOf="@+id/imageView6"
  152.         app:layout_constraintEnd_toStartOf="@+id/guideline2"
  153.         app:layout_constraintTop_toTopOf="@+id/imageView6"
  154.         app:srcCompat="@drawable/weibo" />
  155.     <EditText
  156.         android:id="@+id/user"
  157.         android:layout_width="190dp"
  158.         android:layout_height="0dp"
  159.         android:layout_marginStart="5dp"
  160.         android:background="#eff4f2"
  161.         android:ems="10"
  162.         android:hint="请输入账号"
  163.         android:inputType="textPersonName"
  164.         app:layout_constraintBottom_toBottomOf="@+id/view3"
  165.         app:layout_constraintStart_toEndOf="@+id/imageView4"
  166.         app:layout_constraintTop_toTopOf="@+id/view3" />
  167.     <EditText
  168.         android:id="@+id/pass"
  169.         android:layout_width="190dp"
  170.         android:layout_height="0dp"
  171.         android:layout_marginStart="5dp"
  172.         android:background="#eff4f2"
  173.         android:ems="10"
  174.         android:hint="请输入密码"
  175.         android:inputType="textPassword"
  176.         app:layout_constraintBottom_toBottomOf="@+id/view4"
  177.         app:layout_constraintStart_toEndOf="@+id/imageView"
  178.         app:layout_constraintTop_toTopOf="@+id/view4"
  179.         app:layout_constraintVertical_bias="0.0" />
  180. </androidx.constraintlayout.widget.ConstraintLayout>
复制代码
注册页面JAVA代码如下所示:
  1. package com.android.newshop.Register;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import android.widget.EditText;
  7. import android.widget.TextView;
  8. import android.widget.Toast;
  9. import androidx.appcompat.app.AppCompatActivity;
  10. import com.android.newshop.Data.DatabaseHelper;
  11. import com.android.newshop.Login.LoginActivity;
  12. import com.android.newshop.R;
  13. import org.w3c.dom.Text;
  14. public class RegisterActivity extends AppCompatActivity {
  15.     private EditText mUserNameEditText;
  16.     private EditText mPasswordEditText;
  17.     private TextView tvLogin;
  18.     private DatabaseHelper mDatabaseHelper;
  19.     @Override
  20.     protected void onCreate(Bundle savedInstanceState) {
  21.         super.onCreate(savedInstanceState);
  22.         setContentView(R.layout.activity_register);
  23.         mDatabaseHelper = new DatabaseHelper(this);
  24.         mUserNameEditText = findViewById(R.id.username_edittext);
  25.         mPasswordEditText = findViewById(R.id.password_edittext);
  26.         tvLogin = findViewById(R.id.tv_login);
  27.         // 返回登陆页面
  28.         tvLogin.setOnClickListener(new View.OnClickListener() {
  29.             @Override
  30.             public void onClick(View view) {
  31.                 finish();
  32.             }
  33.         });
  34.         // 注册
  35.         Button registerButton = findViewById(R.id.register_button);
  36.         registerButton.setOnClickListener(new View.OnClickListener() {
  37.             @Override
  38.             public void onClick(View v) {
  39.                 String username = mUserNameEditText.getText().toString().trim();
  40.                 String password = mPasswordEditText.getText().toString().trim();
  41.                 if (username.isEmpty() || password.isEmpty()) {
  42.                     Toast.makeText(getApplicationContext(), "请输入账号或密码", Toast.LENGTH_SHORT).show();
  43.                     return;
  44.                 }
  45.                 boolean result = mDatabaseHelper.insertData(username, password);
  46.                 if (result) {
  47.                     Toast.makeText(getApplicationContext(), "注册成功", Toast.LENGTH_SHORT).show();
  48.                     Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
  49.                     startActivity(intent);
  50.                     finish();
  51.                 } else {
  52.                     Toast.makeText(getApplicationContext(), "注册失败", Toast.LENGTH_SHORT).show();
  53.                 }
  54.             }
  55.         });
  56.     }
  57. }
复制代码
登陆页面xml代码如下所示:
  1. package com.android.newshop.Login;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import android.widget.EditText;
  7. import android.widget.TextView;
  8. import android.widget.Toast;
  9. import androidx.appcompat.app.AppCompatActivity;
  10. import com.android.newshop.Data.DatabaseHelper;
  11. import com.android.newshop.MainActivity;
  12. import com.android.newshop.R;
  13. import com.android.newshop.Register.RegisterActivity;
  14. public class LoginActivity extends AppCompatActivity {
  15.     private TextView loginRegister;
  16.     private EditText user;
  17.     private EditText pass;
  18.     private Button mLoginButton;
  19.     private DatabaseHelper mDatabaseHelper;
  20.     @Override
  21.     protected void onCreate(Bundle savedInstanceState) {
  22.         super.onCreate(savedInstanceState);
  23.         setContentView(R.layout.activity_login);
  24.         user = findViewById(R.id.user);
  25.         pass = findViewById(R.id.pass);
  26.         mLoginButton = findViewById(R.id.login_button);
  27.         loginRegister = findViewById(R.id.login_register);
  28.         mDatabaseHelper = new DatabaseHelper(this);
  29.         loginRegister.setOnClickListener(new View.OnClickListener() {
  30.             @Override
  31.             public void onClick(View v) {
  32.                 Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
  33.                 startActivity(intent);
  34.             }
  35.         });
  36.         mLoginButton.setOnClickListener(new View.OnClickListener() {
  37.             @Override
  38.             public void onClick(View v) {
  39.                 String username = user.getText().toString().trim();
  40.                 String password = pass.getText().toString().trim();
  41.                 if (username.isEmpty() || password.isEmpty()) {
  42.                     Toast.makeText(getApplicationContext(), "请输入账号或密码", Toast.LENGTH_SHORT).show();
  43.                     return;
  44.                 }
  45.                 boolean result = mDatabaseHelper.checkUser(username, password);
  46.                 if (result) {
  47.                     Toast.makeText(getApplicationContext(), "登陆成功", Toast.LENGTH_SHORT).show();
  48.                     Intent intent = new Intent(LoginActivity.this, MainActivity.class);
  49.                     startActivity(intent);
  50.                     finish();
  51.                 } else {
  52.                     Toast.makeText(getApplicationContext(), "账号或密码错误", Toast.LENGTH_SHORT).show();
  53.                 }
  54.             }
  55.         });
  56.     }
  57. }
复制代码
4、搭建主页界面


主页面xml如下所示:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"
  4.     xmlns:tools="http://schemas.android.com/tools"
  5.     android:layout_width="match_parent"
  6.     android:layout_height="match_parent"
  7.     tools:context=".Fragment.HomeFragment">
  8.     <LinearLayout
  9.         android:layout_width="match_parent"
  10.         android:layout_height="match_parent"
  11.         android:layout_marginStart="24dp"
  12.         android:layout_marginTop="3dp"
  13.         android:layout_marginEnd="24dp"
  14.         android:layout_marginBottom="3dp"
  15.         android:orientation="vertical"
  16.         app:layout_constraintBottom_toBottomOf="parent"
  17.         app:layout_constraintEnd_toEndOf="parent"
  18.         app:layout_constraintStart_toStartOf="parent"
  19.         app:layout_constraintTop_toTopOf="parent">
  20.         <com.youth.banner.Banner
  21.             android:id="@+id/banner"
  22.             android:layout_width="match_parent"
  23.             android:layout_height="140dp" />
  24.         <androidx.constraintlayout.widget.ConstraintLayout
  25.             android:layout_width="wrap_content"
  26.             android:layout_height="wrap_content"
  27.             android:layout_marginTop="10dp">
  28.             <View
  29.                 android:id="@+id/view"
  30.                 android:layout_width="230dp"
  31.                 android:layout_height="35dp"
  32.                 android:background="@drawable/home_sousuo"
  33.                 app:layout_constraintStart_toStartOf="parent"
  34.                 app:layout_constraintTop_toTopOf="parent" />
  35.             <Button
  36.                 android:id="@+id/btn_search"
  37.                 android:layout_width="79dp"
  38.                 android:layout_height="38dp"
  39.                 android:layout_marginLeft="5dp"
  40.                 android:layout_marginRight="5dp"
  41.                 android:background="@drawable/home_btn"
  42.                 android:text="搜 索"
  43.                 android:textColor="#fff"
  44.                 app:layout_constraintEnd_toEndOf="parent"
  45.                 app:layout_constraintStart_toEndOf="@+id/view"
  46.                 app:layout_constraintTop_toTopOf="parent"
  47.                 tools:textSize="15sp" />
  48.             <ImageView
  49.                 android:id="@+id/imageView8"
  50.                 android:layout_width="30dp"
  51.                 android:layout_height="35dp"
  52.                 android:layout_marginStart="8dp"
  53.                 android:src="@drawable/sousuo"
  54.                 app:layout_constraintBottom_toBottomOf="@+id/view"
  55.                 app:layout_constraintStart_toStartOf="@+id/view"
  56.                 app:layout_constraintTop_toTopOf="@+id/view" />
  57.             <EditText
  58.                 android:id="@+id/et_search"
  59.                 android:layout_width="170dp"
  60.                 android:layout_height="26dp"
  61.                 android:layout_marginStart="3dp"
  62.                 android:background="#fff"
  63.                 android:ems="10"
  64.                 android:inputType="textPersonName"
  65.                 app:layout_constraintBottom_toBottomOf="@+id/view"
  66.                 app:layout_constraintStart_toEndOf="@+id/imageView8"
  67.                 app:layout_constraintTop_toTopOf="@+id/view" />
  68.         </androidx.constraintlayout.widget.ConstraintLayout>
  69.         <com.google.android.material.tabs.TabLayout
  70.             android:id="@+id/tabLayout"
  71.             android:layout_width="match_parent"
  72.             android:layout_height="wrap_content"
  73.             android:layout_marginTop="10dp"
  74.             app:layout_constraintStart_toStartOf="@+id/guideline5">
  75.             <com.google.android.material.tabs.TabItem
  76.                 android:id="@+id/tab_layout"
  77.                 android:layout_width="wrap_content"
  78.                 android:layout_height="wrap_content"
  79.                 android:text="Monday" />
  80.             <com.google.android.material.tabs.TabItem
  81.                 android:layout_width="wrap_content"
  82.                 android:layout_height="wrap_content"
  83.                 android:text="Tuesday" />
  84.             <com.google.android.material.tabs.TabItem
  85.                 android:layout_width="wrap_content"
  86.                 android:layout_height="wrap_content"
  87.                 android:text="Wednesday" />
  88.         </com.google.android.material.tabs.TabLayout>
  89.         <ListView
  90.             android:id="@+id/lv_list"
  91.             android:layout_width="match_parent"
  92.             android:layout_height="match_parent"
  93.             android:layout_marginTop="10dp"
  94.             android:scrollbars="none" />
  95.     </LinearLayout>
  96. </androidx.constraintlayout.widget.ConstraintLayout>
复制代码

        接下来是对应java文件代码:
  1. package com.android.newshop.Fragment;
  2. import android.content.Context;
  3. import android.content.Intent;
  4. import android.graphics.Outline;
  5. import android.os.Bundle;
  6. import android.text.TextUtils;
  7. import android.util.Log;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11. import android.view.ViewOutlineProvider;
  12. import android.widget.AdapterView;
  13. import android.widget.Button;
  14. import android.widget.EditText;
  15. import android.widget.ImageView;
  16. import android.widget.ListView;
  17. import android.widget.TextView;
  18. import android.widget.Toast;
  19. import androidx.constraintlayout.widget.Guideline;
  20. import androidx.fragment.app.Fragment;
  21. import com.android.newshop.Adapter.ShopAdapter;
  22. import com.android.newshop.Bean.Shop;
  23. import com.android.newshop.Details.DetailsActivity;
  24. import com.android.newshop.MainActivity;
  25. import com.android.newshop.R;
  26. import com.google.android.material.tabs.TabLayout;
  27. import com.google.gson.Gson;
  28. import com.google.gson.reflect.TypeToken;
  29. import com.youth.banner.Banner;
  30. import com.youth.banner.loader.ImageLoader;
  31. import java.io.IOException;
  32. import java.io.InputStream;
  33. import java.nio.charset.StandardCharsets;
  34. import java.util.ArrayList;
  35. import java.util.HashSet;
  36. import java.util.List;
  37. import java.util.Set;
  38. public class HomeFragment extends Fragment {
  39.     // 声明控件成员变量
  40.     private EditText etSearch;
  41.     private Button btnSearch;
  42.     private ListView listView;
  43.     private ShopAdapter shopAdapter;
  44.     private List<Shop> shopList = new ArrayList<>();  // 存放展示的商品列表
  45.     private List<Shop> dataAll = new ArrayList<>();   // 存放所有商品数据
  46.     private String selectedType;                      // 选择的商品类别
  47.     private Banner banner;
  48.     private TabLayout tabLayout;
  49.     public HomeFragment() {
  50.     }
  51.     @Override
  52.     public void onCreate(Bundle savedInstanceState) {
  53.         super.onCreate(savedInstanceState);
  54.         if (getArguments() != null) {
  55.         }
  56.     }
  57.     @Override
  58.     public View onCreateView(LayoutInflater inflater, ViewGroup container,
  59.                              Bundle savedInstanceState) {
  60.         View view = inflater.inflate(R.layout.fragment_home, container, false);
  61.         initView(view);
  62.         banner();
  63.         initListView();
  64.         sousuo();
  65.         return view;
  66.     }
  67.     private void sousuo() {
  68.         // 设置点击搜索按钮事件
  69.         btnSearch.setOnClickListener(new View.OnClickListener() {
  70.             @Override
  71.             public void onClick(View v) {
  72.                 String searchText = etSearch.getText().toString().trim();   // 获取搜索框文本
  73.                 if (TextUtils.isEmpty(searchText)) {                        // 搜索框为空时展示全部商品
  74.                     shopList.clear();
  75.                     shopList.addAll(dataAll);
  76.                     shopAdapter.notifyDataSetChanged();
  77.                     Toast.makeText(getActivity(), "请输入搜索内容!", Toast.LENGTH_SHORT).show();
  78.                 } else {                                                    // 根据关键词搜索相关商品并展示
  79.                     shopList.clear();
  80.                     for (Shop shop : dataAll) {
  81.                         if (shop.getTitle().contains(searchText)) {
  82.                             shopList.add(shop);
  83.                         }
  84.                     }
  85.                     shopAdapter.notifyDataSetChanged();
  86.                 }
  87.             }
  88.         });
  89.     }
  90.     private void initListView() {
  91.         if (!"".equals(loadJSONFromAsset())) {
  92.             dataAll = new Gson().fromJson(loadJSONFromAsset(), new TypeToken<List<Shop>>() {
  93.             }.getType());
  94.             shopList.addAll(dataAll);
  95.         }
  96.         shopAdapter = new ShopAdapter(getContext(), shopList);
  97.         listView.setAdapter(shopAdapter);
  98.         listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  99.             @Override
  100.             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  101.                 Intent intent = new Intent(getActivity(), DetailsActivity.class);
  102.                 intent.putExtra("data", shopList.get(position));
  103.                 startActivity(intent);
  104.             }
  105.         });
  106.         Set<String> tt = new HashSet<>();
  107.         for (Shop newsBean : dataAll) {
  108.             tt.add(newsBean.getShoptype());
  109.         }
  110.         tabLayout.removeAllTabs();
  111.         for (String s : tt) {
  112.             TabLayout.Tab tab = tabLayout.newTab();
  113.             tab.setText(s);
  114.             tabLayout.addTab(tab);
  115.         }
  116.         // 标题
  117.         tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
  118.             @Override
  119.             public void onTabSelected(TabLayout.Tab tab) {
  120.                 selectedType = tab.getText().toString();
  121.                 shopList.clear();
  122.                 List<Shop> filteredList = new ArrayList<>();
  123.                 for (int i = 0; i < dataAll.size(); i++) {
  124.                     Shop newsBean = dataAll.get(i);
  125.                     if (newsBean.getShoptype().equals(selectedType)) {
  126.                         shopList.add(newsBean);
  127.                     }
  128.                 }
  129.                 shopAdapter.notifyDataSetChanged();
  130.             }
  131.             @Override
  132.             public void onTabUnselected(TabLayout.Tab tab) {
  133.             }
  134.             @Override
  135.             public void onTabReselected(TabLayout.Tab tab) {
  136.             }
  137.         });
  138.     }
  139.    
  140.    
  141.     private void initView(View view) {
  142.         banner = (Banner) view.findViewById(R.id.banner);
  143.         btnSearch = (Button) view.findViewById(R.id.btn_search);
  144.         etSearch = (EditText) view.findViewById(R.id.et_search);
  145.         tabLayout = (TabLayout) view.findViewById(R.id.tabLayout);
  146.         listView = (ListView) view.findViewById(R.id.lv_list);
  147.         tabLayout = view.findViewById(R.id.tabLayout);
  148.     }
  149. }
复制代码


5、搭建购物车界面 



购物车页面xml代码如下所示:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"
  4.     xmlns:tools="http://schemas.android.com/tools"
  5.     android:layout_width="match_parent"
  6.     android:layout_height="match_parent"
  7.     tools:context=".Fragment.CartFragment">
  8.     <ListView
  9.         android:id="@+id/lv_cart"
  10.         android:layout_width="0dp"
  11.         android:layout_height="0dp"
  12.         app:layout_constraintBottom_toTopOf="@+id/view10"
  13.         app:layout_constraintEnd_toEndOf="parent"
  14.         app:layout_constraintHorizontal_bias="1.0"
  15.         app:layout_constraintStart_toStartOf="parent"
  16.         app:layout_constraintTop_toBottomOf="@+id/view13" />
  17.     <View
  18.         android:id="@+id/view10"
  19.         android:layout_width="0dp"
  20.         android:layout_height="50dp"
  21.         app:layout_constraintBottom_toBottomOf="parent"
  22.         app:layout_constraintEnd_toEndOf="parent"
  23.         app:layout_constraintStart_toStartOf="parent" />
  24.     <TextView
  25.         android:id="@+id/tv_total"
  26.         android:layout_width="0dp"
  27.         android:layout_height="wrap_content"
  28.         android:layout_marginStart="8dp"
  29.         android:text="合计:¥00.00"
  30.         android:textColor="#000"
  31.         android:textSize="16sp"
  32.         android:textStyle="bold"
  33.         app:layout_constraintBottom_toBottomOf="parent"
  34.         app:layout_constraintEnd_toStartOf="@+id/btn_pay"
  35.         app:layout_constraintStart_toStartOf="parent"
  36.         app:layout_constraintTop_toBottomOf="@+id/lv_cart" />
  37.     <Button
  38.         android:id="@+id/btn_pay"
  39.         android:layout_width="100dp"
  40.         android:layout_height="0dp"
  41.         android:layout_marginTop="5dp"
  42.         android:layout_marginEnd="8dp"
  43.         android:layout_marginBottom="5dp"
  44.         android:background="@drawable/cart_item"
  45.         android:text="去结算"
  46.         android:textColor="#fff"
  47.         app:layout_constraintBottom_toBottomOf="parent"
  48.         app:layout_constraintEnd_toEndOf="parent"
  49.         app:layout_constraintTop_toBottomOf="@+id/lv_cart" />
  50.     <View
  51.         android:id="@+id/view13"
  52.         android:layout_width="wrap_content"
  53.         android:layout_height="100dp"
  54.         app:layout_constraintEnd_toEndOf="parent"
  55.         app:layout_constraintStart_toStartOf="parent"
  56.         app:layout_constraintTop_toTopOf="parent" />
  57.     <TextView
  58.         android:id="@+id/textView10"
  59.         android:layout_width="wrap_content"
  60.         android:layout_height="wrap_content"
  61.         android:layout_marginStart="8dp"
  62.         android:layout_marginTop="8dp"
  63.         android:text="购物车"
  64.         android:textColor="#000"
  65.         android:textSize="28sp"
  66.         android:textStyle="bold"
  67.         app:layout_constraintStart_toStartOf="parent"
  68.         app:layout_constraintTop_toTopOf="parent" />
  69.     <LinearLayout
  70.         android:layout_width="0dp"
  71.         android:layout_height="0dp"
  72.         android:layout_margin="10dp"
  73.         android:gravity="center"
  74.         android:orientation="vertical"
  75.         app:layout_constraintBottom_toTopOf="@+id/lv_cart"
  76.         app:layout_constraintEnd_toEndOf="@+id/view13"
  77.         app:layout_constraintStart_toStartOf="parent"
  78.         app:layout_constraintTop_toBottomOf="@+id/textView10">
  79.         <LinearLayout
  80.             android:layout_width="match_parent"
  81.             android:layout_height="wrap_content"
  82.             android:orientation="horizontal">
  83.             <TextView
  84.                 android:id="@+id/textView15"
  85.                 android:layout_width="wrap_content"
  86.                 android:layout_height="wrap_content"
  87.                 android:text="收货地址:"
  88.                 android:textColor="#000"
  89.                 android:textSize="20sp" />
  90.             <TextView
  91.                 android:id="@+id/textView16"
  92.                 android:layout_width="wrap_content"
  93.                 android:layout_height="wrap_content"
  94.                 android:layout_weight="1"
  95.                 android:text="xxx省xxx市xxx区(县)xxx村" />
  96.         </LinearLayout>
  97.     </LinearLayout>
  98. </androidx.constraintlayout.widget.ConstraintLayout>
复制代码
        实现了加载购物车数据、表现购物车列表、付出功能的实现。
        在onCreateView方法中,它通过调用loadDataToListView方法来加载数据并将其设置到ListView上。然后,它设置了付出按钮的点击事件,当用户点击付出按钮时,会表现一个付出乐成的Toast消息。
        在loadDataToListView方法中,它起首对购物车数据进行逆序排序,以便按照添加时间的逆序表现购物车列表。然后,它创建一个CartItemAdapter适配器,并将其设置到ListView上。
        对应的java编程代码:
  1. package com.android.newshop.Fragment;
  2. import android.content.Context;
  3. import android.content.SharedPreferences;
  4. import android.os.Bundle;
  5. import androidx.fragment.app.Fragment;
  6. import android.util.Log;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.widget.Button;
  11. import android.widget.ListView;
  12. import android.widget.TextView;
  13. import android.widget.Toast;
  14. import com.android.newshop.Adapter.CartItemAdapter;
  15. import com.android.newshop.Bean.CartItem;
  16. import com.android.newshop.R;
  17. import java.util.ArrayList;
  18. import java.util.Collections;
  19. import java.util.Comparator;
  20. import java.util.List;
  21. import java.util.Map;
  22. public class CartFragment extends Fragment {
  23.     private ListView listView;
  24.     private CartItemAdapter cartAdapter;
  25.     private Button pay;
  26. private TextView zj;
  27.     public CartFragment() {
  28.     }
  29.     @Override
  30.     public void onCreate(Bundle savedInstanceState) {
  31.         super.onCreate(savedInstanceState);
  32.     }
  33.     @Override
  34.     public View onCreateView(LayoutInflater inflater, ViewGroup container,
  35.                              Bundle savedInstanceState) {
  36.         View view = inflater.inflate(R.layout.fragment_cart, container, false);
  37.         listView = view.findViewById(R.id.lv_cart);
  38.         pay = view.findViewById(R.id.btn_pay);
  39.         zj = view.findViewById(R.id.tv_total);
  40.         // 加载并设置数据到ListView
  41.         loadDataToListView(listView);
  42.         // 设置支付按钮的点击事件
  43.         pay.setOnClickListener(new View.OnClickListener() {
  44.             @Override
  45.             public void onClick(View v) {
  46.                 Toast.makeText(getActivity(), "支付成功,购物车已清空!", Toast.LENGTH_SHORT).show();
  47.             }
  48.         });
  49.         return view;
  50.     }
  51.         // 对数据集合进行逆序排序
  52.         Collections.sort(cartList, new Comparator<CartItem>() {
  53.             @Override
  54.             public int compare(CartItem item1, CartItem item2) {
  55.                 // 逆序比较添加时间
  56.                 return Long.compare(item2.getAddTime(), item1.getAddTime());
  57.             }
  58.         });
  59.         Collections.reverse(cartList); // 将ArrayList进行逆序排列
  60. // 创建适配器并设置到ListView上
  61.         CartItemAdapter adapter = new CartItemAdapter(getActivity(), cartList);
  62.         Log.d("Adapter", "Adapter set to ListView");
  63.     }
  64. }
复制代码
6、搭建我的页面


对应的xml代码如下所示:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"
  4.     xmlns:tools="http://schemas.android.com/tools"
  5.     android:layout_width="match_parent"
  6.     android:layout_height="match_parent"
  7.     tools:context=".Fragment.MineFragment">
  8.     <ImageView
  9.         android:id="@+id/imageView9"
  10.         android:layout_width="0dp"
  11.         android:layout_height="260dp"
  12.         android:scaleType="centerCrop"
  13.         android:src="@drawable/bclx"
  14.         app:layout_constraintEnd_toEndOf="parent"
  15.         app:layout_constraintStart_toStartOf="parent"
  16.         app:layout_constraintTop_toTopOf="parent" />
  17.     <LinearLayout
  18.         android:layout_width="0dp"
  19.         android:layout_height="0dp"
  20.         android:layout_marginStart="16dp"
  21.         android:layout_marginEnd="16dp"
  22.         android:orientation="vertical"
  23.         app:layout_constraintBottom_toBottomOf="parent"
  24.         app:layout_constraintEnd_toEndOf="parent"
  25.         app:layout_constraintStart_toStartOf="parent"
  26.         app:layout_constraintTop_toBottomOf="@+id/imageView9">
  27.         <LinearLayout
  28.             android:layout_width="match_parent"
  29.             android:layout_height="wrap_content"
  30.             android:orientation="horizontal">
  31.             <TextView
  32.                 android:id="@+id/textView8"
  33.                 android:layout_width="wrap_content"
  34.                 android:layout_height="wrap_content"
  35.                 android:text="地址:"
  36.                 android:textColor="#000"
  37.                 android:textSize="18sp" />
  38.             <TextView
  39.                 android:id="@+id/textView9"
  40.                 android:layout_width="wrap_content"
  41.                 android:layout_height="wrap_content"
  42.                 android:layout_weight="1"
  43.                 android:gravity="center|left"
  44.                 android:text="xxx省xxx市xxx区(县)xxx村"
  45.                 android:textSize="17sp" />
  46.         </LinearLayout>
  47.         <View
  48.             android:id="@+id/view11"
  49.             android:layout_width="match_parent"
  50.             android:layout_height="2dp"
  51.             android:layout_marginTop="5dp"
  52.             android:background="#ccc" />
  53.         <LinearLayout
  54.             android:layout_width="match_parent"
  55.             android:layout_height="wrap_content"
  56.             android:layout_marginTop="8dp"
  57.             android:orientation="horizontal">
  58.             <TextView
  59.                 android:id="@+id/tv_modify"
  60.                 android:layout_width="wrap_content"
  61.                 android:layout_height="wrap_content"
  62.                 android:layout_weight="1"
  63.                 android:text="修改密码"
  64.                 android:textColor="#000"
  65.                 android:textSize="18sp" />
  66.             <ImageView
  67.                 android:id="@+id/imageView10"
  68.                 android:layout_width="15dp"
  69.                 android:layout_height="match_parent"
  70.                 android:src="@drawable/right" />
  71.         </LinearLayout>
  72.         <View
  73.             android:id="@+id/view15"
  74.             android:layout_width="match_parent"
  75.             android:layout_height="2dp"
  76.             android:layout_marginTop="5dp"
  77.             android:background="#ccc" />
  78.     </LinearLayout>
  79. </androidx.constraintlayout.widget.ConstraintLayout>
复制代码
实现java代码如下所示:
  1. package com.android.newshop.Fragment;
  2. import android.content.DialogInterface;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.EditText;
  9. import android.widget.ImageView;
  10. import android.widget.TextView;
  11. import android.widget.Toast;
  12. import androidx.appcompat.app.AlertDialog;
  13. import androidx.fragment.app.Fragment;
  14. import com.android.newshop.Data.DatabaseHelper;
  15. import com.android.newshop.Login.LoginActivity;
  16. import com.android.newshop.R;
  17. /**
  18. * A simple {@link Fragment} subclass.
  19. * Use the {@link MineFragment#newInstance} factory method to
  20. * create an instance of this fragment.
  21. */
  22. public class MineFragment extends Fragment {
  23.     private ImageView imageView9;
  24.     private TextView textView8;
  25.     private TextView textView9;
  26.     private View view11;
  27.     private TextView tvModify;
  28.     private View view15;
  29.     public static MineFragment newInstance(String param1, String param2) {
  30.         MineFragment fragment = new MineFragment();
  31.         return fragment;
  32.     }
  33.     @Override
  34.     public void onCreate(Bundle savedInstanceState) {
  35.         super.onCreate(savedInstanceState);
  36.     }
  37.     @Override
  38.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  39.         View view = inflater.inflate(R.layout.fragment_mine, container, false);
  40.         tvModify = view.findViewById(R.id.tv_modify);
  41.         modify();
  42.         return view;
  43.     }
  44.     // 设置tvModify的点击修改密码事件
  45.     private void modify() {
  46.         tvModify.setOnClickListener(new View.OnClickListener() {
  47.             @Override
  48.             public void onClick(View v) {
  49.                 showDialog();
  50.             }
  51.         });
  52.     }
  53.     // 创建自定义对话框方法
  54.     private void showDialog() {
  55.         AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
  56.         // 获取布局中的控件
  57.         View dialogView = getLayoutInflater().inflate(R.layout.dialog_modify_password, null);
  58.         final EditText etUsername = dialogView.findViewById(R.id.et_username);
  59.         final EditText etNewPassword = dialogView.findViewById(R.id.et_new_password);
  60.         builder.setView(dialogView)
  61.                 .setPositiveButton("确认", new DialogInterface.OnClickListener() {
  62.                     @Override
  63.                     public void onClick(DialogInterface dialog, int which) {
  64.                         String username = etUsername.getText().toString();
  65.                         String newPassword = etNewPassword.getText().toString();
  66.                         // 调用修改密码的方法
  67.                         boolean isPasswordUpdated = updatePassword(username, newPassword);
  68.                         if (isPasswordUpdated) {
  69.                             Toast.makeText(getActivity(), "密码修改成功!", Toast.LENGTH_SHORT).show();
  70.                             Intent intent = new Intent(getActivity(), LoginActivity.class);
  71.                             startActivity(intent);
  72.                             getActivity().finish();//注销页面
  73.                         } else {
  74.                             Toast.makeText(getActivity(), "密码修改失败!", Toast.LENGTH_SHORT).show();
  75.                         }
  76.                     }
  77.                 })
  78.                 .setNegativeButton("取消", null)
  79.                 .create()
  80.                 .show();
  81.     }
  82.     // 修改密码的方法
  83.     private boolean updatePassword(String username, String newPassword) {
  84.         // 这里调用之前提到的 DatabaseHelper 类的 updatePassword 方法来执行密码修改操作
  85.         DatabaseHelper dbHelper = new DatabaseHelper(getActivity());
  86.         return dbHelper.updatePassword(username, newPassword);
  87.     }
  88. }
复制代码
        至此,完整的购物商城项目创建完成。
五、项目运行

1.图片演示

(1)运行app到模仿器上,表现启动面:


(2)登陆页面:

(3)点击注册跳转到注册页面:

(4)注册账号后进行登陆然乎进入首页:

(5)点击商品进入详情页:

(5)进入购车页面

(6)进入我的页面

        运行结果和功能很完整,至此就完成了非常简朴的购物车App。大家可以跟着动手做一下,放上本身喜欢的商品,另有头像!
六、项目总结





七、获取源码

   
关注公众号《编程乐学》

   
配景复兴:23102801

   





欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4