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

简介: 进一步理解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

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

相关文章
|
XML 编解码 开发工具
《移动互联网技术》第六章 资源管理: 掌握定制控件样式、界面主题、可绘制资源程序的编写方法
《移动互联网技术》第六章 资源管理: 掌握定制控件样式、界面主题、可绘制资源程序的编写方法
48 0
|
11天前
|
开发者
鸿蒙next版开发:ArkTS组件通用属性(菜单控制)
在HarmonyOS 5.0中,ArkTS引入了灵活的菜单控制属性,支持通过长按、点击或鼠标右键触发弹出式菜单,增强用户交互体验。本文详细介绍了bindMenu和bindContextMenu方法,以及MenuItem的配置属性,并提供了示例代码,帮助开发者更好地理解和使用这些功能。
86 1
|
1月前
|
JavaScript
avaScript如何实现 选项卡功能
avaScript如何实现 选项卡功能
19 1
|
3月前
|
搜索推荐
7、自定义工作界面
这篇文章是关于如何自定义Photoshop工作界面的,但具体内容没有在摘要中提供,因此无法给出详细摘要。如果需要了解Photoshop工作界面的自定义方法,包括面板、菜单、快捷键等的个性化设置,建议直接访问博客以获取完整信息。
7、自定义工作界面
|
XML 移动开发 Android开发
鸿蒙开发实例 | 可复用列表项的ListContainer
简短的列表可以通过定向布局实现,但是如果列表项非常多,那么使用定向布局就不合适了。与许多其他的移动开发技术一样,鸿蒙操作系统也提供了可复用列表项的列表组件,这就是本篇文章要介绍的ListContainer。
186 0
鸿蒙开发实例 | 可复用列表项的ListContainer
|
供应链 Java
Java初学者作业——为某超市设计管理系统,需要在控制台展示系统菜单,菜单之间可以完成跳转。
Java初学者作业——为某超市设计管理系统,需要在控制台展示系统菜单,菜单之间可以完成跳转。
416 0
Java初学者作业——为某超市设计管理系统,需要在控制台展示系统菜单,菜单之间可以完成跳转。