移动应用程序设计基础——点菜单列表实现

简介: 进一步理解Android各种控件的使用,加深控件的属性、方法的使用,熟练掌握ListView控件的使用,熟练掌握对话框的使用。实现点菜单列表1.1布局结构列表布局分为两大部分,上半部分显示列表内容,底部显示所有菜品的总价;菜品项如图所示包括1.图片,图片格式120*120;2.标题,居中,android:textAppearance="?android:attr/textAppearanceLarge",3.菜品介绍内容,最多显示3行,超过部分用…表示,android:textAppearan

《移动应用程序设计基础》实验三点菜单列表实现

实验名称:

点菜单列表实现

所使用的工具软件及环境:

JDK1.8,Android Studio

一、实验目的:

进一步理解Android各种控件的使用,加深控件的属性、方法的使用,熟练掌握ListView控件的使用,熟练掌握对话框的使用。

二、实验内容:

1.实现点菜单列表

1.1布局结构

image.gif编辑

image.gif编辑

列表布局分为两大部分,上半部分显示列表内容,底部显示所有菜品的总价;

菜品项如图所示包括

1.图片,图片格式120*120

2.标题,居中,android:textAppearance="?android:attr/textAppearanceLarge"
3.
菜品介绍内容,最多显示3行,超过部分用…表示,android:textAppearance="?android:attr/textAppearanceMedium"

4.显示单价,显示字体android:textAppearance="?android:attr/textAppearanceMedium"

5.左右两端显示按钮,中间显示数字。

1.2功能

1.以列表方式显示点菜单;

2.点击“-”或“+”按钮,购买数量作相应变化,同时,总价也随之变动

1.3所用资源

1.数据

  <array name="item_content">

       <item>“白灼”是粤菜的一种烹调技法,就是用滚水或汤将食物烫熟。

           多数的北方人都对“白灼”有一种概念上的混淆,认为白灼就是用白水煮一下捞出,其实不然,那是对字面上的一个误解,真正的白灼虾还是有几道工序的,经过一个朋友的指点,才得以顿悟。

           白灼虾其实是最简单的,无需过多调料,没有繁杂的过程,也不必耗费大量的时间,甚至不用考虑食用时的温度,不用过多思忖摆盘的装饰,搭配一个同样简约的酸咸小味碟,就可以上桌了。

           特别是想吃虾又懒得太操劳的人,可以选择做这道菜,简单又新鲜。也是我最钟爱的一道保留菜谱。

           作为一只基围虾,衣衫齐整的出场体面面完整,无疑是对它的最高奖赏,绅士而优雅地被人类享用当然是最好的结局。

       </item>

       <item>

           相传,烤鸭之美,是源于名贵品种的北京鸭,它是当今世界最优质的一种肉食鸭。

           据说,这一特种纯北京鸭的饲养,约起于千年前左右,是因辽金元之历代帝王游猎,偶获此纯白野鸭种,后为游猎而养,一直延续下来,才得此优良纯种,并培育成今之名贵的肉食鸭种。即用填喂方法育肥的一种白鸭,故名“填鸭”。

           不仅如此,北京鸭曾在百年以前传至欧美,经繁育一鸣惊人。因而,作为优质品种的北京鸭,成为世界名贵鸭种来源已久。

       </item>

   </array>

   <array name="item_title">

       <item>白灼虾</item>

       <item>北京烤鸭</item>

   </array>

   <array name="item_price">

       <item>58</item>

       <item>128</item>

</array>

2.图片

image.gif编辑image.gif编辑

3.布局文件(各自实现)

2.点击每个列表项,以弹出Dialog方式显示该菜品的详情

2.1布局

image.gif编辑  image.gif编辑

包括title,图片,菜品标题,详情,单价和按钮

2.2功能

点击列表项,将该菜品的信息(图片,菜品标题,详情和单价)以构造函数参数的方式传递到弹出对话框中,弹出对话框通过自定义界面布局的形式实现菜品详情的显示。

image.gif编辑image.gif编辑  

三、实验结果测试

image.gif编辑

主要的布局文件和string.xml文件,MainActivity.java为登录界面的java文件,ProgressActivity.java为菜单界面的java文件。dialog和dialog2为两个普通对话框的布局文件。progress为菜单的listview的布局文件,simpleadapter_list_item为listview中item的布局文件。

主要代码:(完整所有代码在资源下载压缩包中,文章结尾有资源下载链接)

//ProgressActivity.java
package com.example.login;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.DialogFragment;
import android.content.DialogInterface;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.os.Bundle;
//import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import com.example.login.R;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class ProgressActivity extends AppCompatActivity {
    private ListView listView;
    private int [] ivR = {
            R.drawable.pic1,R.drawable.pic2,
    };
    private String[] titles;
    private String[] content;
    private String[] price;
    private Button less,add;
    private TextView num;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.progress);
        //引用string中的文件
        listView = (ListView)findViewById(R.id.listView);
        List<HashMap<String,Object>> arrayList = new ArrayList<>();
        titles =getResources().getStringArray(R.array.item_title);
        content =getResources().getStringArray(R.array.item_content);
        price =getResources().getStringArray(R.array.item_price);
        //创建自定义Adapter,继承BaseAdapter
        MyBaseAdapter MyBase=new MyBaseAdapter();
        listView.setAdapter(MyBase);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                AlertDialog.Builder builder = new AlertDialog.Builder(ProgressActivity.this);
                builder.setTitle("菜肴详情");
                builder.setCancelable(true);            //点击对话框以外的区域是否让对话框消失
                //设置正面按钮
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
                //创建AlertDialog对象
                AlertDialog dialog = builder.create();
                //对话框显示的监听事件
                if(i==0)
                {
                    View dialogView = View.inflate(ProgressActivity.this, R.layout.dialogactivity, null);
                    dialog.setView(dialogView);
                }
                else
                {
                    View dialogView = View.inflate(ProgressActivity.this, R.layout.dialogactivity2, null);
                    dialog.setView(dialogView);
                }
                dialog.show();
            }
        });
    }
    private class MyBaseAdapter extends BaseAdapter{
        @Override
        public int getCount() {
            return 2;
        }
        @Override
        public Object getItem(int i) {
            return null;
        }
        @Override
        public long getItemId(int i) {
            return 0;
        }
        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            View vi=View.inflate(ProgressActivity.this,R.layout.simpleadapter_list_item,null);
            ImageView imageView=(ImageView) vi.findViewById(R.id.list_item_iv);
            TextView titles_=(TextView) vi.findViewById(R.id.list_item_tv1);
            TextView content_=(TextView) vi.findViewById(R.id.list_item_tv2);
            TextView price_=(TextView) vi.findViewById(R.id.list_item_tv3);
            TextView num=(TextView)vi.findViewById(R.id.textView_num);
            TextView sum=(TextView)findViewById(R.id.textView_sumprice);
            Button less=(Button)vi.findViewById(R.id.button_less);
            Button add=(Button)vi.findViewById(R.id.button_add);
            imageView.setBackgroundResource(ivR[i]);
            titles_.setText(titles[i]);
            content_.setText(content[i]);
            price_.setText(price[i]);
            add.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int a=Integer.parseInt((String)num.getText());
                    String a0=Integer.toString(a+1);
                    num.setText(a0);
                    if(i==0){
                        int t=Integer.parseInt((String)sum.getText());
                        String t0=Integer.toString(t+58);
                        sum.setText(t0);
                    }
                    else{
                        int t=Integer.parseInt((String)sum.getText());
                        String t0=Integer.toString(t+128);
                        sum.setText(t0);
                    }
                }
            });
            less.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int a=Integer.parseInt((String)num.getText());
                    if(a==0)
                    {
                        String a0=Integer.toString(a);
                        num.setText(a0);
                    }
                    else {
                        String a0=Integer.toString(a-1);
                        num.setText(a0);
                        if(i==0){
                            int t=Integer.parseInt((String)sum.getText());
                            String t0=Integer.toString(t-58);
                            sum.setText(t0);
                        }
                        else
                        {
                            int t=Integer.parseInt((String)sum.getText());
                            String t0=Integer.toString(t-128);
                            sum.setText(t0);
                        }
                    }
                }
            });
            return vi;
        }
    }
}

image.gif

实验结果截图:

image.gif编辑image.gif编辑image.gif编辑

image.gif编辑image.gif编辑

image.gif编辑image.gif编辑

心得与体会:

本次实验学习时间较长,但是收获颇多,对android常用高级控件进行使用,学习了listview的还有BaseAdapter的使用,对普通对话框Dialog有了进一步的学习,还复习了以前实验的内容与知识。对今后android开发软件的学习有了进一步的加深与进步。

https://download.csdn.net/download/weixin_48388330/76125440

资源中的图片以及内容只适用与学习

相关文章
|
6月前
|
数据采集 人工智能 搜索推荐
GEO与SEO的核心差异:AI搜索时代企业应提前布局的下一代优化体系
GEO不是“AI版SEO”,而是AI搜索时代的新增长逻辑:SEO抢流量位置,GEO夺AI信任票。二者在优化对象、目标、竞争维度、技术逻辑和效果上根本不同——GEO聚焦被AI理解、采纳与引用,实现心智占领与权威确立。企业需SEO稳基础,GEO建未来。(239字)
1401 3
|
6月前
|
机器学习/深度学习 传感器 数据采集
告别死记硬背,这篇机器学习“黑话”指南让你秒变内行
本 glossary 以工业制造为隐喻,系统梳理机器学习全链路核心概念:从数据预处理(特征工程、归一化、降维等)、主流算法(SVM、CNN、Transformer等),到训练优化(损失函数、反向传播、正则化)、模型评估(混淆矩阵、F1、AUC)及工程部署(MLOps、边缘推理)。共52个术语,兼顾准确性与可理解性,助力快速掌握ML知识体系。(239字)
637 4
|
8月前
|
缓存 JavaScript 开发者
微信小游戏开发的技术难点
微信小游戏开发在2026年面临五大技术挑战:高性能模式下的内存管控、WASM性能瓶颈、4MB主包极速启动、跨平台渲染一致性及开放数据域通信限制。开发者需在严苛环境下实现流畅体验,考验极致优化能力。#微信小游戏 #游戏外包
|
6月前
|
存储 人工智能 安全
玩转小龙虾AI🦞OpenClaw指南:1分钟部署(阿里云/本地)+Coding Plan百炼API配置+6大场景实战+技能扩展+FAQ
“一句话指令,AI搞定所有重复工作”——这是2026年OpenClaw(曾用名Clawdbot、Moltbot)风靡全球的核心原因。作为PSPDFKit创始人Peter Steinberger打造的开源AI智能体执行网关,它彻底打破传统AI“只聊天不干活”的局限,凭借“本地优先、自托管、强扩展”三大优势,成为连接大语言模型与本地系统的“超级中枢”,实现“理解→规划→执行→反馈”的完整任务闭环。
659 4
|
6月前
|
消息中间件 缓存 NoSQL
互联网医院看诊系统架构解析:从预约挂号到在线问诊的完整流程
本文详解互联网医院看诊系统的技术实现,涵盖预约挂号、在线问诊、视频通信、电子处方、订单支付及诊后管理六大核心模块;采用微服务架构,集成Redis缓存、MQ消息队列、WebRTC音视频与分布式锁等关键技术,保障高并发下的稳定与安全。(239字)
|
6月前
|
JSON 运维 安全
接入Claude on Bedrock,我遇到的4个注意事项
本项目基于Amazon Bedrock调用Anthropic Claude Sonnet,实现企业级PDF文档关键信息抽取与摘要生成。依托其8万token长上下文、原生多模态及强安全对齐能力,在VPC内网链路中保障数据不出域,兼顾合规性与工程效率。
560 0
|
10月前
|
安全 前端开发 NoSQL
诊所his系统源码,门诊系统源码,一级医院信息管理系统源码
云门诊HIS系统,专为中小医疗机构设计,支持中医馆、门诊部等。含预约挂号、电子病历、药品管理、财务统计等功能,Java开发,前后端分离,技术先进,安全高效,易扩展。
369 1
|
人工智能 物联网 大数据
智能城市基础设施:城市服务与管理的智能化
【10月更文挑战第26天】智能城市基础设施通过物联网、大数据、云计算、人工智能和区块链等前沿技术,实现城市服务与管理的全面智能化。本文探讨了这些技术的应用场景及其对未来城市发展的深远影响,涵盖交通、能源、环境、公共安全和公共服务等领域,展望了智能城市更加精细化、绿色、宜居的未来,并提出了应对挑战的策略。
|
安全 Linux Shell
Linux | Rsync 命令:16 个实际示例(上)
Linux | Rsync 命令:16 个实际示例(上)
1006 0
Linux | Rsync 命令:16 个实际示例(上)