《移动应用程序设计基础》实验三点菜单列表实现
实验名称:
点菜单列表实现
所使用的工具软件及环境:
JDK1.8,Android Studio
一、实验目的:
进一步理解Android各种控件的使用,加深控件的属性、方法的使用,熟练掌握ListView控件的使用,熟练掌握对话框的使用。
二、实验内容:
1.实现点菜单列表
1.1布局结构
编辑
编辑
列表布局分为两大部分,上半部分显示列表内容,底部显示所有菜品的总价;
菜品项如图所示包括
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.图片
编辑编辑
3.布局文件(各自实现)
2.点击每个列表项,以弹出Dialog方式显示该菜品的详情
2.1布局
编辑 编辑
包括title,图片,菜品标题,详情,单价和按钮
2.2功能
点击列表项,将该菜品的信息(图片,菜品标题,详情和单价)以构造函数参数的方式传递到弹出对话框中,弹出对话框通过自定义界面布局的形式实现菜品详情的显示。
编辑编辑
三、实验结果测试
编辑
主要的布局文件和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; } } }
实验结果截图:
编辑编辑编辑
编辑编辑
编辑编辑
心得与体会:
本次实验学习时间较长,但是收获颇多,对android常用高级控件进行使用,学习了listview的还有BaseAdapter的使用,对普通对话框Dialog有了进一步的学习,还复习了以前实验的内容与知识。对今后android开发软件的学习有了进一步的加深与进步。
https://download.csdn.net/download/weixin_48388330/76125440
资源中的图片以及内容只适用与学习