diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/.gitignore b/DeliciousFoodApp——蒋迎晨第四次实验代码/.gitignore
new file mode 100644
index 0000000..aa724b7
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
+local.properties
diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/.gitignore b/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/compiler.xml b/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/compiler.xml
new file mode 100644
index 0000000..b589d56
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/deploymentTargetDropDown.xml b/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/deploymentTargetDropDown.xml
new file mode 100644
index 0000000..8d77edc
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/deploymentTargetDropDown.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/gradle.xml b/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/gradle.xml
new file mode 100644
index 0000000..0897082
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/gradle.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/migrations.xml b/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/migrations.xml
new file mode 100644
index 0000000..f8051a6
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/migrations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/misc.xml b/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/misc.xml
new file mode 100644
index 0000000..533ff6a
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/.idea/misc.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/app/.gitignore b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/app/build.gradle.kts b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/build.gradle.kts
new file mode 100644
index 0000000..e131386
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/build.gradle.kts
@@ -0,0 +1,45 @@
+plugins {
+ alias(libs.plugins.androidApplication)
+}
+
+android {
+ namespace = "com.example.deliciousfoodapp"
+ compileSdk = 34
+
+ defaultConfig {
+ applicationId = "com.example.deliciousfoodapp"
+ minSdk = 24
+ targetSdk = 34
+ versionCode = 1
+ versionName = "1.0"
+
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ isMinifyEnabled = false
+ proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
+ }
+ }
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+ buildFeatures {
+ viewBinding = true
+ }
+}
+
+dependencies {
+
+ implementation(libs.appcompat)
+ implementation(libs.material)
+ implementation(libs.activity)
+ implementation(libs.constraintlayout)
+ implementation(libs.legacy.support.v4)
+ implementation(libs.recyclerview)
+ testImplementation(libs.junit)
+ androidTestImplementation(libs.ext.junit)
+ androidTestImplementation(libs.espresso.core)
+}
\ No newline at end of file
diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/app/proguard-rules.pro b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/androidTest/java/com/example/deliciousfoodapp/ExampleInstrumentedTest.java b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/androidTest/java/com/example/deliciousfoodapp/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..bbb5b6a
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/androidTest/java/com/example/deliciousfoodapp/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.example.deliciousfoodapp;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("com.example.deliciousfoodapp", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/main/AndroidManifest.xml b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..e8f5dc2
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/main/AndroidManifest.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/main/java/com/example/deliciousfoodapp/IndexActivity.java b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/main/java/com/example/deliciousfoodapp/IndexActivity.java
new file mode 100644
index 0000000..7c6b6d9
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/main/java/com/example/deliciousfoodapp/IndexActivity.java
@@ -0,0 +1,53 @@
+package com.example.deliciousfoodapp;
+
+import android.os.Bundle;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import androidx.activity.EdgeToEdge;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
+public class IndexActivity extends AppCompatActivity implements View.OnClickListener{
+ public LinearLayout homeline,foodline,shoppingline,personline;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ EdgeToEdge.enable(this);
+ setContentView(R.layout.activity_index);
+ homeline=findViewById(R.id.home);
+ homeline.setOnClickListener(this);
+ foodline=findViewById(R.id.food);
+ foodline.setOnClickListener(this);
+ shoppingline=findViewById(R.id.shopping);
+ shoppingline.setOnClickListener(this);
+ personline=findViewById(R.id.person);
+ personline.setOnClickListener(this);
+ replaceFragment(new homeFragment());
+ }
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()){
+ case R.id.home:
+ replaceFragment(new homeFragment());
+ break;
+ case R.id.food:
+ replaceFragment(new foodFragment());
+ break;
+ case R.id.shopping:
+ replaceFragment(new shopFragment());
+ break;
+ case R.id.person:
+ replaceFragment(new personFragment());
+ }
+ }
+
+ private void replaceFragment(Fragment fragment) {
+ FragmentManager fragmentManager=getSupportFragmentManager();
+ FragmentTransaction transaction=fragmentManager.beginTransaction();
+ transaction.replace(R.id.framlayout,fragment);
+ transaction.commit();
+ }
+}
\ No newline at end of file
diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/main/java/com/example/deliciousfoodapp/LoginActivity.java b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/main/java/com/example/deliciousfoodapp/LoginActivity.java
new file mode 100644
index 0000000..dc910a9
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/main/java/com/example/deliciousfoodapp/LoginActivity.java
@@ -0,0 +1,43 @@
+package com.example.deliciousfoodapp;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+
+import androidx.activity.EdgeToEdge;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.graphics.Insets;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.WindowInsetsCompat;
+
+public class LoginActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ EdgeToEdge.enable(this);
+ setContentView(R.layout.activity_login);
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
+ Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
+ return insets;
+ });
+ Button button1 = (Button) findViewById(R.id.buttonlogin);
+ Button button2 = (Button) findViewById(R.id.buttonregister);
+ button1.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent=new Intent(LoginActivity.this, IndexActivity.class);
+ startActivity(intent);
+ }
+ });
+ button2.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent=new Intent(LoginActivity.this, RegisterActivity.class);
+ startActivity(intent);
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/main/java/com/example/deliciousfoodapp/MainActivity.java b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/main/java/com/example/deliciousfoodapp/MainActivity.java
new file mode 100644
index 0000000..22e6daf
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/main/java/com/example/deliciousfoodapp/MainActivity.java
@@ -0,0 +1,36 @@
+package com.example.deliciousfoodapp;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+
+import androidx.activity.EdgeToEdge;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.graphics.Insets;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.WindowInsetsCompat;
+
+public class MainActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ EdgeToEdge.enable(this);
+ setContentView(R.layout.activity_main);
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
+ Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
+ return insets;
+ });
+
+ Button button = (Button) findViewById(R.id.button);
+ button.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent=new Intent(MainActivity.this, LoginActivity.class);
+ startActivity(intent);
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/main/java/com/example/deliciousfoodapp/MyAdapter.java b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/main/java/com/example/deliciousfoodapp/MyAdapter.java
new file mode 100644
index 0000000..19d46d2
--- /dev/null
+++ b/DeliciousFoodApp——蒋迎晨第四次实验代码/app/src/main/java/com/example/deliciousfoodapp/MyAdapter.java
@@ -0,0 +1,64 @@
+package com.example.deliciousfoodapp;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+
+import java.util.List;
+import java.util.Map;
+
+public class MyAdapter extends BaseAdapter {
+ private List