安卓(android)订餐菜单【Android移动开发基础案例教程(第2版)黑马程序员】
一、实验目的(如果代码有错漏,可查看源码)
1.掌握Activity生命周的每个方法。
2.掌握Activity的创建、配置、启动和关闭。
3.掌握Intent和IntentFilter的使用。
4.掌握Activity之间的跳转方式、任务栈和四种启动模式。
5.掌握在Activity中添加和使用Fragment。
二、实验条件
1.熟悉Java编程语言;了解Android应用程序的基本结构;掌握XML布局文件的编写;了解Activity和Fragment的基本概念。
2.其他准备:准备好菜单项的图片资源;设计好菜单的数据结构和内容。
三、实验内容
1.搭建菜单界面布局:搭建左侧菜单栏界面布局;搭建右侧菜单列表界面布局;搭建菜单列表界面的条目布局。
2.实现菜单界面功能:封装菜品信息的实体类;加载左侧菜单栏界面布局;编写菜单列表的适配器;加载右侧菜单栏界面布局;实现显示菜单的效果。
3.运行程序:运行程序,显示推荐选项的界面效果;点击“进店必买选项”,显示其对应的界面效果。
4实验过程使用的图片如下:
四、实验指导
1.搭建菜单界面布局
(1)订单菜单界面主要包含三部分:顶部导航栏、左侧菜单栏和右侧菜单列表。搭建界面布局的步骤:
①创建项目程序,导入图片资源素材;
②在res→values目录下创建colors.xml文件,添加颜色定义代码如下:
<?xml version="1.0" encoding="utf-8"?>
<resources><color name="purple_200">#FFBB86FC</color><color name="purple_500">#FF6200EE</color><color name="purple_700">#FF3700B3</color><color name="teal_200">#FF03DAC5</color><color name="teal_700">#FF018786</color><color name="black">#FF000000</color><color name="white">#FFFFFFFF</color><color name="dark_gray">#626262</color><color name="gray">#f7f8f9</color></resources>
③在res→values目录下创建styles.xml文件,定义文本样式代码如下:
<?xml version="1.0" encoding="utf-8"?>
<resources><style name="tvNavigationBarStyles"><item name="android:layout_width">wrap_content</item><item name="android:layout_height">wrap_content</item><item name="android:layout_marginLeft">25dp</item><item name="android:layout_marginTop">4dp</item><item name="android:textSize">16sp</item></style><style name="tvleftStyles"><item name="android:layout_width">100dp</item><item name="android:layout_height">40dp</item><item name="android:gravity">center</item><item name="android:textColor">@color/dark_gray</item><item name="android:textSize">16sp</item></style></resources>
④在res→layout目录下,在activity_main.xml中添加界面控件;创建left_layout.xml完成搭建左侧菜单栏布局;创建right_layout.xml文件搭建右侧菜单栏布局;创建list_item.xml完成创建listview的条目布局界面,并修改默认标题栏。
activity_main.xml
<?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:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/white"android:orientation="vertical"tools:context=".MainActivity"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="50dp"android:layout_marginBottom="4dp"android:gravity="center_vertical"><TextViewandroid:id="@+id/tv_order"style="@style/tvNavigationBarStyles"android:textColor="@color/black"android:text="点菜"/><TextViewandroid:id="@+id/tv_discuss"android:layout_toRightOf="@id/tv_order"style="@style/tvNavigationBarStyles"android:textColor="@color/dark_gray"android:text="评价"/><TextViewandroid:id="@+id/tv_business"style="@style/tvNavigationBarStyles"android:textColor="@color/black"android:layout_toRightOf="@id/tv_discuss"android:text="商家"/><TextViewandroid:layout_width="70dp"android:layout_height="30dp"android:textSize="12sp"android:layout_alignParentRight="true"android:layout_marginRight="15dp"android:background="@drawable/left"android:gravity="center"android:textColor="#ef842c"android:text="好友拼单"/></RelativeLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><fragmentandroid:id="@+id/left"android:name="cn.itcast.menu.LeftFragment"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"tools:layout="@layout/left_layout"/><fragmentandroid:id="@+id/right"android:name="cn.itcast.menu.RightFragment"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="3"tools:layout="@layout/right_layout"/></LinearLayout>
</LinearLayout>
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"android:padding="5dp"><ImageViewandroid:id="@+id/iv_img"android:layout_width="70dp"android:layout_height="70dp"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:layout_marginRight="8dp"android:orientation="vertical"><TextViewandroid:textSize="14sp"android:padding="2dp"android:id="@+id/tv_name"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="#868788"android:id="@+id/tv_sale"android:textSize="12sp"/><TextViewandroid:id="@+id/tv_price"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="2dp"android:textSize="12sp"/></LinearLayout></LinearLayout>
left_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/tv_recommend"style="@style/tvleftStyles"android:background="@color/white"android:text="推荐" /><TextViewandroid:id="@+id/tv_must_buy"style="@style/tvleftStyles"android:text="进店必买"/></LinearLayout>
right_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ListViewandroid:id="@+id/lv_list"android:layout_width="match_parent"android:layout_height="wrap_content"android:divider="@null"/></LinearLayout>
2.实现菜单界面功能
(1)封装菜品信息实体类FoodBean:
package cn.itcast.menu;public class FoodBean {private static final long serialVersionUID=1L;private String name;private String sales;private String price;private int img;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSales() {return sales;}public void setSales(String sales) {this.sales = sales;}public String getPrice() {return price;}public void setPrice(String price) {this.price = price;}public int getImg() {return img;}public void setImg(int img) {this.img = img;}}
(2)加载左侧菜单栏界面布局,在LeftFragment.java中代码实现如下:
package cn.itcast.menu;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
public class LeftFragment extends Fragment {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view =inflater.inflate(R.layout.left_layout,container,false);return view;}@Overridepublic void onPause() {super.onPause();}
}
(3)通过ListView实现菜单列表,编写其对应的适配器RightAdapter.java。
package cn.itcast.menu;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 java.util.List;public class RightAdapter extends BaseAdapter {private Context mContext;private List<FoodBean> list;public RightAdapter(Context context , List<FoodBean>list){this.mContext=context;this.list=list;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder=null;if(convertView==null){convertView=View.inflate(mContext,R.layout.list_item,null);holder= new ViewHolder();holder.tv_name=convertView.findViewById(R.id.tv_name);holder.tv_sale=convertView.findViewById(R.id.tv_sale);holder.tv_price=convertView.findViewById(R.id.tv_price);holder.iv_img=convertView.findViewById(R.id.iv_img);convertView.setTag(holder);}else {holder=(ViewHolder) convertView.getTag();}FoodBean bean=list.get(position);holder.tv_name.setText(bean.getName());holder.tv_sale.setText(bean.getSales());holder.tv_price.setText(bean.getPrice());holder.iv_img.setBackgroundResource(bean.getImg());return convertView;}class ViewHolder{TextView tv_name,tv_sale,tv_price;ImageView iv_img;}
}
(4)创建右侧Fragment来显示菜单栏列表信息,具体实现代码如下:
package cn.itcast.menu;import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import java.io.Serializable;
import java.util.List;public class RightFragment extends Fragment {private ListView lv_list;public RightFragment() {}public RightFragment getInstance(List<FoodBean> list) {RightFragment rightFragment = new RightFragment();Bundle bundle = new Bundle();bundle.putSerializable("list", (Serializable) list);rightFragment.setArguments(bundle);return rightFragment;}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.right_layout, container, false);lv_list = view.findViewById(R.id.lv_list);if (getArguments() != null) {List<FoodBean> list = (List<FoodBean>) getArguments().getSerializable("list");RightAdapter adapter = new RightAdapter(getActivity(), list);lv_list.setAdapter(adapter);}return view;}
}
(5)实现显示菜单的效果,在MainActivity.java中定义init()方法、setData()方法、clickEvent()方法和switchData()方法,分别实现初始化界面控件、实现界面控件点击事件和切换右侧菜单列表数据的功能,代码如下:
package cn.itcast.menu;import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction;
import android.app.Fragment;
import android.app.FragmentManager;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class MainActivity extends AppCompatActivity {private FragmentManager fragmentManager;private FragmentTransaction fragmentTransaction;private Fragment leftFragment;private RightFragment rightFragment;private TextView tv_recommed,tv_must_buy;private String[]names1={"爆款*肥牛鱼豆腐骨肉相连三荤五素一份米饭","豪华双人套餐","【热销】双人套餐(含两份米饭)"};private String[]sales1={"月售520 好评度80%","月售520 好评度80%","月售520 好评度80%"};private String[]prices1={"$23","$41","$32"};private int []imgs1={R.drawable.food1,R.drawable.food2,R.drawable.food3};private String[]names2={"鸿运当头-油焖大虾","金肥牛跃龙门","香甜菠萝咕噜肉"};private String[]sales2={"月售1314 好评度90%","月售999 好评度85%","月售520 好评度80%"};private String[]prices2={"$36","$45","$29"};private int []imgs2={R.drawable.foodd1,R.drawable.foodd2,R.drawable.foodd3};private Map<String, List<FoodBean>> map;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setData();init();clickEvent();}private void init(){//给主页面左侧的fragment界面控件赋值fragmentManager = getFragmentManager();leftFragment=fragmentManager.findFragmentById(R.id.left);tv_recommed=findViewById(R.id.tv_recommend);tv_must_buy=findViewById(R.id.tv_must_buy);}private void setData(){//给数据赋值将其全部放在对应的数据集里map=new HashMap<>();List<FoodBean>list1=new ArrayList<>();List<FoodBean>list2=new ArrayList<>();for(int i=0;i<names1.length;i++){FoodBean bean=new FoodBean();bean.setName(names1[i]);bean.setPrice(prices1[i]);bean.setImg(imgs1[i]);bean.setSales(sales1[i]);list1.add(bean);}map.put("1",list1);for(int i=0;i<names2.length;i++){FoodBean bean=new FoodBean();bean.setName(names2[i]);bean.setPrice(prices2[i]);bean.setImg(imgs2[i]);bean.setSales(sales2[i]);list2.add(bean);}map.put("2",list2);}private void clickEvent(){//点击推荐还在必须控件变化颜色,可以增加可适度tv_recommed.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {switchData (map.get("1"));tv_recommed.setBackgroundColor(Color.WHITE);}});tv_must_buy.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {switchData (map.get("2"));tv_must_buy.setBackgroundColor(Color.WHITE);}});switchData (map.get("1"));}public void switchData(List<FoodBean> list){rightFragment=new RightFragment().getInstance(list);//实例fragmentfragmentManager=getFragmentManager();//获取FragmentManagerfragmentTransaction=getSupportFragmentManager().beginTransaction();//开启事务fragmentTransaction.replace(R.id.right,rightFragment);//添加一个FragmentfragmentTransaction.commit();//提交事务}}
五、代码下载地址:
android: 实现注册界面、实现注册界面、饭堂小广播、音乐播放器、记事本、读取手机通讯录、学生管理系统 - Gitee.com
相关文章:

安卓(android)订餐菜单【Android移动开发基础案例教程(第2版)黑马程序员】
一、实验目的(如果代码有错漏,可查看源码) 1.掌握Activity生命周的每个方法。 2.掌握Activity的创建、配置、启动和关闭。 3.掌握Intent和IntentFilter的使用。 4.掌握Activity之间的跳转方式、任务栈和四种启动模式。 5.掌握在Activity中添加…...

【cocos creator】【模拟经营】餐厅经营demo
下载:【cocos creator】模拟经营餐厅经营...

前端 | 深入理解Promise
1. 引言 JavaScript 是一种单线程语言,这意味着它一次仅能执行一个任务。为了处理异步操作,JavaScript 提供了回调函数,但是随着项目处理并发任务的增加,回调地狱 (Callback Hell) 使异步代码很难维护。为此,ES6带来了…...

Visual Studio Code修改terminal字体
个人博客地址:Visual Studio Code修改terminal字体 | 一张假钞的真实世界 默认打开中断后字体显示如下: 打开设置,搜索配置项terminal.integrated.fontFamily,修改配置为monospace。修改后效果如下:...

自然语言处理-词嵌入 (Word Embeddings)
人工智能例子汇总:AI常见的算法和例子-CSDN博客 词嵌入(Word Embedding)是一种将单词或短语映射到高维向量空间的技术,使其能够以数学方式表示单词之间的关系。词嵌入能够捕捉语义信息,使得相似的词在向量空间中具有…...

自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数
import numpy as np import torch import torch.nn as nn import torch.optim as optim from sklearn.metrics import precision_score, recall_score, f1_score# 数据准备 class1_points np.array([[1.9, 1.2],[1.5, 2.1],[1.9, 0.5],[1.5, 0.9],[0.9, 1.2],[1.1, 1.7],[1.4,…...

【论文笔记】Fast3R:前向并行muti-view重建方法
众所周知,DUSt3R只适合做稀疏视角重建,与sapnn3r的目的类似,这篇文章以并行的方法,扩展了DUSt3R在多视图重建中的能力。 abstract 多视角三维重建仍然是计算机视觉领域的核心挑战,尤其是在需要跨不同视角实现精确且可…...

谈谈你所了解的AR技术吧!
深入探讨 AR 技术的原理与应用 在科技飞速发展的今天,AR(增强现实)技术已经悄然改变了我们与周围世界互动的方式。你是否曾想象过如何能够通过手机屏幕与虚拟物体进行实时互动?在这篇文章中,我们将深入探讨AR技术的原…...

upload labs靶场
upload labs靶场 注意:本人关卡后面似乎相比正常的关卡少了一关,所以每次关卡名字都是1才可以和正常关卡在同一关 一.个人信息 个人名称:张嘉玮 二.解题情况 三.解题过程 题目:up load labs靶场 pass 1前后端 思路及解题:…...

搜索引擎友好:设计快速收录的网站架构
本文来自:百万收录网 原文链接:https://www.baiwanshoulu.com/14.html 为了设计一个搜索引擎友好的网站架构,以实现快速收录,可以从以下几个方面入手: 一、清晰的目录结构与层级 合理划分内容:目录结构应…...

基于 oneM2M 标准的空气质量监测系统的互操作性
论文标题 英文标题: Interoperability of Air Quality Monitoring Systems through the oneM2M Standard 中文标题: 基于 oneM2M 标准的空气质量监测系统的互操作性 作者信息 Jonnar Danielle Diosana, Gabriel Angelo Limlingan, Danielle Bryan Sor…...

春晚舞台上的人形机器人:科技与文化的奇妙融合
文章目录 人形机器人Unitree H1的“硬核”实力传统文化与现代科技的创新融合网友热议与文化共鸣未来展望:科技与文化的更多可能结语 2025 年央视春晚的舞台,无疑是全球华人目光聚焦的焦点。就在这个盛大的舞台上,一场名为《秧BOT》的创意融合…...

零基础学习书生.浦语大模型-入门岛
第一关:Linux基础知识 Cursor连接服务器 使用Remote - SSH插件即可 注:46561:服务器端口号 运行指令 python hello_world.py端口映射 ssh -p 46561 rootssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyCheckingno …...
Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr
在新版本的 Gurobi 中,向 addConstr 这个方法中传入一个 TempConstr 对象,在模型中就会根据这个对象生成一个约束。更重要的是:TempConstr 对象可以传给所有addConstr系列方法,所以下面先介绍 TempConstr 对象 TempConstr TempC…...

数据结构---图的遍历
图的遍历(Travering Graph):从图的某一顶点出发,访遍图中的其余顶点,且每个顶点仅被访问一次,图的遍历算法是各种图的操作的基础。 复杂性:图的任意顶点可能和其余的顶点相邻接,可能在访问了某个顶点后,沿某条路径搜索…...

Qwen 模型自动构建知识图谱,生成病例 + 评价指标优化策略
关于数据库和检索方式的选择 AI Medical Consultant for Visual Question Answering (VQA) 系统:更适合在前端使用向量数据库(如FAISS)结合关系型数据库来实现图像和文本的检索与存储。因为在 VQA 场景中,你需要对患者上传的图像或…...

.Net Web API 访问权限限定
看到一个代码是这样的: c# webapi 上 [Route("api/admin/file-service"), AuthorizeAdmin] AuthorizeAdmin 的定义是这样的 public class AuthorizeAdminAttribute : AuthorizeAttribute {public AuthorizeAdminAttribute(){Roles "admin"…...

项目架构调整,切换版本并发布到中央仓库
文章目录 0.完成运维篇maven发布到中央仓库的部分1.配置server到settings.xml2.配置gpg 1.架构调整1.sunrays-dependencies(统一管理依赖和配置)1.作为单独的模块2.填写发布到中央仓库的配置1.基础属性2.基本配置3.插件配置 3.完整的pom.xml 2.sunrays-f…...

考试知识点位运算
深入理解位运算 在C编程的世界里,位运算作为一种直接对二进制位进行操作的运算方式,虽然不像加减乘除等算术运算那样广为人知,却在许多关键领域发挥着至关重要的作用。从底层系统开发到高效算法设计,位运算都展现出其独特的魅力与…...

matlab快速入门(2)-- 数据处理与可视化
MATLAB的数据处理 1. 数据导入与导出 (1) 从文件读取数据 Excel 文件:data readtable(data.xlsx); % 读取为表格(Table)CSV 文件:data readtable(data.csv); % 自动处理表头和分隔符文本文件:data load(data.t…...

Kafka中文文档
文章来源:https://kafka.cadn.net.cn 什么是事件流式处理? 事件流是人体中枢神经系统的数字等价物。它是 为“永远在线”的世界奠定技术基础,在这个世界里,企业越来越多地使用软件定义 和 automated,而软件的用户更…...

Python-列表
3.1 列表是什么 在Python中,列表是一种非常重要的数据结构,用于存储一系列有序的元素。列表中的每个元素都有一个索引,索引从0开始。列表可以包含任何类型的元素,包括其他列表。 # 创建一个列表my_list [1, 2, 3, four, 5.0]…...

51单片机开发:定时器中断
目标:利用定时器中断,每隔1s开启/熄灭LED1灯。 外部中断结构图如下图所示,要使用定时器中断T0,须开启TE0、ET0。: 系统中断号如下图所示:定时器0的中断号为1。 定时器0的工作方式1原理图如下图所示&#x…...

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
目录 1 -> HML语法 1.1 -> 页面结构 1.2 -> 数据绑定 1.3 -> 普通事件绑定 1.4 -> 冒泡事件绑定5 1.5 -> 捕获事件绑定5 1.6 -> 列表渲染 1.7 -> 条件渲染 1.8 -> 逻辑控制块 1.9 -> 模板引用 2 -> CSS语法 2.1 -> 尺寸单位 …...

算法【混合背包】
混合背包是指多种背包模型的组合与转化。 下面通过题目加深理解。 题目一 测试链接:1742 -- Coins 分析:这道题可以通过硬币的个数将其转化为01背包,完全背包和多重背包。如果硬币的个数是1个,则是01背包;如果硬币的…...

WordPress eventon-lite插件存在未授权信息泄露漏洞(CVE-2024-0235)
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

基于微信小程序的医院预约挂号系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...

C++初阶 -- 手撕string类(模拟实现string类)
目录 一、string类的成员变量 二、构造函数 2.1 无参版本 2.2 有参版本 2.3 缺省值版本 三、析构函数 四、拷贝构造函数 五、c_str函数 六、operator重载 七、size函数 八、迭代器iterator 8.1 正常版本 8.2 const版本 九、operator[] 9.1 正常版本 9.2 const版…...

【Postman接口测试】Postman的安装和使用
在软件测试领域,接口测试是保障软件质量的关键环节之一,而Postman作为一款功能强大且广受欢迎的接口测试工具,能够帮助测试人员高效地进行接口测试工作。本文将详细介绍Postman的安装和使用方法,让你快速上手这款工具。 一、Pos…...

miniconda学习笔记
文章主要内容:演示miniconda切换不同python环境,安装python库,使用pycharm配置不同的conda建的python环境 目录 一、miniconda 1. 是什么? 2.安装miniconda 3.基本操作 一、miniconda 1. 是什么? miniconda是一个anac…...