网络资源模板--基于Android Studio 实现的外卖订餐App

发布于:2025-08-19 ⋅ 阅读:(10) ⋅ 点赞:(0)

目录

一、测试环境说明

二、项目简介

三、项目演示

四、部设计详情(部分)

商家首页

用户首页

五、项目源码 


一、测试环境说明

电脑环境

Windows 11

编写语言

JAVA

开发软件

Android Studio  (2020)

开发软件只要大于等于测试版本即可(近几年官网直接下载也可以),若是版本低于测试版本请自行测试。项目需要根据你的软件自行适配

二、项目简介

该项目简介来自网络,具体内容需要自行测试

本系统基于 Android 平台开发,采用 Java语言编写。采用 MVC模式进行设计,将业务逻辑、数据访问和界面显示分离,提高代码的可维护性和可重用性。

数据库采用 SQLite,支持轻里级数据存储和快速查询。同时,使用 HTTP 协议进行网络通信,实现数据的远程访问和同步。

在开发过程中,我们采用了Android studio 作为开发工具,使用了 Grade构建工具进行项目构建和依赖管理。本系统是一个综合性的Android 管理系统,主要包括以下几个功能模块:

账号管理:系统支持分权管理,不同账号拥有不同的权限。管理员拥有最高权限,可以进行权限分配等操作。账号密码采用加密算法进行安全存储,确保用户数据的安全性。同时,系统支持多语言切换,满足不同国家和地区用户的需求。

商家管理:商家可以进行店铺商品的增删改查操作,同时可以发布新的商品信息。商品信息包括名称、描述、价格、图片等,商家可以根据需求添加或修改商品信息。此外,商家还可以修改密码和个人信息,提高账号的安全性,用户管理:用户可以通过系统主册商家或用户账号,并设置密码。用户可以查看未处理订单、已完成订单等,并根据订单状态和时间筛选和查看订单信息。用户还可以查看商家评论,修改个人信息和密码,以及增改查收货地址等。

订单管理:本系统支持买家和卖家进行订单操作,包括查看未处理订单、已完成订单、取消订单和完成订单等。用户可以根据订单状态和时间筛选和查看订单信息,同时可以查看订单详情和操作订单状态。此外,系统还支持订单导出和打印功能,方便用户管理和跟踪订单。

评论管理:用户可以对购买的商品进行评价,为其他用户提供参考。评论内容包括评分、文字评价和图片评价等,用户可以根据需要进行修改或删除评论。同时,系统还支持匿名评价功能,保护用户的隐私和权益。

收货地址管理:用户可以添加、删除或修改收货地址,方便用户在购买商品时选择不同的收货地址。系统支持存储多个收货地址,提高用户的购物体验。

三、项目演示

网络资源模板--基于Android studio 外卖订餐App

四、部设计详情(部分)

商家首页

1. 页面结构分析

该页面采用经典的顶部搜索栏+中部内容区+底部导航栏的三段式布局结构。

顶部是蓝色背景的搜索框,中部为商品列表展示区(使用ListView实现),底部是包含"首页"、"添加商品"和"我的"三个选项的RadioButton导航栏。

整体采用RelativeLayout作为根布局,通过相对定位控制各组件的位置关系,如搜索栏与内容区的上下衔接,以及导航栏固定在屏幕底部。

这种结构清晰地区分了功能模块,符合常见的移动应用设计规范。

2. 核心技术应用

页面运用了多项Android核心技术:通过SP实现本地数据存储,用于获取当前登录账号;使用自定义BaseAdapter(FoodAdapter)实现ListView的数据绑定;采用TextWatcher监听器实现实时搜索功能;

通过上下文菜单(ContextMenu)实现商品条目的长按操作;利用Intent实现页面跳转和数据传递。

特别是通过RadioButton模拟底部导航栏效果,实现图文混排,并通过自定义ButtonColorListener控制按钮状态切换,展现了良好的交互设计。

3. 功能详细说明

该页面是商家端主界面,主要实现三大功能:顶部搜索框可实时筛选商品;中部列表展示商家所有商品,支持长按弹出菜单进行删除或修改操作;底部导航可切换至商品添加页面或个人中心。

搜索功能通过监听输入内容动态查询数据库并刷新列表,商品管理功能通过数据库操作实现持久化存储。整体采用事件驱动架构,各项操作都配有相应的用户反馈(如删除成功的Toast提示),体现了完整的业务逻辑闭环和用户体验设计。

package com.example.orderfood.activity;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.example.orderfood.R;
import com.example.orderfood.adapter.FoodAdapter;
import com.example.orderfood.bean.FoodBean;
import com.example.orderfood.dao.FoodDao;
import com.example.orderfood.dao.UserDao;
import com.example.orderfood.listener.ButtonColorListener;

import java.util.ArrayList;

public class BusinessActivity extends AppCompatActivity {

    ArrayList<FoodBean> originalItems;
    ListView foodList;

    FoodAdapter adapter;

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


        //实现加载食物列表
        foodList = this.findViewById(R.id.business_list_view);//创建一个视图

        //获取当前账号,进行查询
        SharedPreferences sharedPreferences = getSharedPreferences("data", Context.MODE_PRIVATE);
        String account = sharedPreferences.getString("account", "");

        originalItems = UserDao.getAllFood(account);//查找到所有数据

        if (originalItems == null || originalItems.size() == 0) {
            foodList.setAdapter(null);
        } else {
            adapter = new FoodAdapter(this, originalItems);
            foodList.setAdapter(adapter);
        }


        //实现点击按钮的时候设置一下选中的颜色
        Button home = findViewById(R.id.business_home);
        Button add = findViewById(R.id.business_add);
        Button my = findViewById(R.id.business_my);

        home.setOnClickListener(new ButtonColorListener(home, add, my, 1));
        add.setOnClickListener(new ButtonColorListener(home, add, my, 1));
        my.setOnClickListener(new ButtonColorListener(home, add, my, 1));
        home.callOnClick();//模拟点击home

        //点击加号进行跳转界面
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(BusinessActivity.this, AddGoodActivity.class);
                startActivity(intent);


            }
        });

        my.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(BusinessActivity.this, BusinessMyActivity.class);
                overridePendingTransition(0, 0);
                startActivity(intent);

            }
        });


        EditText search = findViewById(R.id.business_search);//这个是搜索的内容
        search.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                //执行搜索
                String name = search.getText().toString();

                originalItems = UserDao.getAllFoodByName(account, name);//查找到所有数据

                if (originalItems == null || originalItems.size() == 0) {
                    foodList.setAdapter(null);
                } else {
                    adapter = new FoodAdapter(BusinessActivity.this, originalItems);
                    foodList.setAdapter(adapter);
                }
            }
        });


        //实现注册上下文
        registerForContextMenu(foodList);
        //实现上下文菜单,实现删除的功能
        foodList.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                openContextMenu(view);
                return true;
            }
        });


    }


    // onCreateContextMenu

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {

        super.onCreateContextMenu(menu, v, menuInfo);
        //设置要弹出的菜单内容

        // 设置弹出菜单的标题和选项
        getMenuInflater().inflate(R.menu.business_home_menu, menu);
    }

    //设置点击的事件内容

    @SuppressLint("NonConstantResourceId")
    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {


        //获取到菜单的上下文内容
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        //获取点击到内容是什么
        int position = info.position;

        if (item.getItemId() == R.id.business_home_list_menu_delete) {
            deleteItem(position);
            return true;
        } else if (item.getItemId() == R.id.business_home_list_menu_update) {
            updateItem(position);
            return true;
        } else {
            return super.onContextItemSelected(item);
        }


    }

    /**
     * 删除功能
     *
     * @param position
     */
    private void deleteItem(int position) {

        //执行删除的第一部,要从界面上面删掉内容,同时还要丛数据库内容的方面删掉内容
        // 从数据源中删除项
        //实现在数据库层面上进行删除功能
        FoodBean temp = adapter.getItem(position);
        int a = FoodDao.delFood(temp.getS_food_id());
        if (a == 1) {
            Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();
            adapter.remove(adapter.getItem(position));
            // 通知适配器数据已更改
            adapter.notifyDataSetChanged();
        } else {
            Toast.makeText(this, "删除失败", Toast.LENGTH_SHORT).show();
        }

    }

    /**
     * 这个是更改项目
     *
     * @param position
     */

    private void updateItem(int position) {

        //执行删除的第一部,要从界面上面删掉内容,同时还要丛数据库内容的方面删掉内容
        // 从数据源中删除项
        //实现在数据库层面上进行删除功能
        FoodBean temp = adapter.getItem(position);
        //需要将ID传过去
        Intent intent = new Intent(BusinessActivity.this, UpdateGoodActivity.class);
        intent.putExtra("id", temp.getS_food_id());
        startActivity(intent);

        //打开更改界面,并且绘制更改界面

//        int a=  FoodDao.delFood(temp.getS_food_id());
//        if(a==1){
//            Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();
//            adapter.remove(adapter.getItem(position));
//            // 通知适配器数据已更改
//            adapter.notifyDataSetChanged();
//        }else{
//            Toast.makeText(this, "删除失败", Toast.LENGTH_SHORT).show();
//        }


    }


}

用户首页

1. 页面结构分析

该页面采用单Activity多Fragment架构,整体为垂直方向的LinearLayout,包含一个占据主要空间的Fragment容器(FrameLayout)和底部的Material Design风格导航栏(BottomNavigationView)。

页面通过动态加载不同Fragment实现功能切换,结构简洁高效。顶部无工具栏设计使内容区域最大化,蓝色调的底部导航栏提供清晰的视觉引导,符合现代移动应用设计趋势。

Fragment容器使用权重布局(layout_weight)确保在不同屏幕尺寸下都能合理分配空间,体现响应式设计思想。

2. 核心技术应用

页面核心采用AndroidX的FragmentManager进行动态Fragment管理,通过Transaction实现界面切换。

底部导航使用Material Components库的BottomNavigationView,配合自定义颜色选择器实现图标和文字的状态变化。

利用Intent参数传递实现差异化初始化(如直接跳转"我的"页面)。Fragment事务使用commitNow()确保立即执行,避免异步带来的状态不一致问题。

整体架构体现了单一Activity原则和模块化设计思想,便于功能扩展和维护。

3. 功能详细说明

这是用户端主控页面,提供三大功能模块切换:首页展示未完成订单和个人中心。

特殊场景支持通过Intent参数直接定位到指定模块(如从登录跳转时直达个人中心)。

底部导航栏采用Material Design规范,选中状态有视觉反馈,操作流畅。页面还预留了exit()方法用于安全退出应用,通过finishAffinity()确保完全关闭所有相关Activity。

这种设计既保证了用户体验的一致性,又提供了灵活的场景适配能力。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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"
    tools:context=".user.activity.UserManageActivity"
    android:orientation="vertical"
    android:background="#F5F5F5"
    >

    <!--多层级可以事项 A-->
    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        >

    </FrameLayout>


    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#03A9F4"
        app:menu="@menu/bottom_navigation_menu"
        app:itemIconTint="@color/selectcolor"
        app:itemTextColor="@color/selectcolor"
        />


</LinearLayout>

五、项目源码 

👇👇👇👇👇快捷方式👇👇👇👇👇


网站公告

今日签到

点亮在社区的每一天
去签到