本界面主要功能:
选择不同食堂,查看菜品;点击菜品进入评论界面。
Activity:ClientPage
package com.example.fanpeng.smartcanteen;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.Toast;
import org.litepal.LitePal;
import java.util.ArrayList;
import java.util.List;
public class ClientPage extends AppCompatActivity {//只做展示,本界面数据暂时未连接数据库
private Spinner spinner,spinner1;
private List<Dishes> dishesList=new ArrayList<>();
private boolean showOnSale=false;
private String choosePart;
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client_page);
spinner=findViewById(R.id.choose_part);
spinner1=findViewById(R.id.choose_onsale);
String[] decide=new String[]{"显示全部","只显示上架"};
String[] choose=new String[]{"益新一楼","益新二楼","东区一楼","东区二楼"};
ArrayAdapter<String> spinnerAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,choose);
ArrayAdapter<String> spinnerAdapter1=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,decide);
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(spinnerAdapter);
spinner1.setAdapter(spinnerAdapter1);
/下拉列表与数据库和listView关联//
Intent intent=getIntent();
Bundle bundle=intent.getExtras();
User tempUser=(User)bundle.getSerializable("user");
///
initDishes();//测试,暂时将dishesList= LitePal.where("part=?",str).find(Dishes.class);写死
DishAdapter adapter=new DishAdapter(ClientPage.this,R.layout.dish_menu,dishesList);
listView=findViewById(R.id.list_view);
listView.setAdapter(adapter);
/根据下拉列表更换ListView内容(选择事件)///
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
choosePart=parent.getItemAtPosition(position).toString();
if(showOnSale){
dishesList= LitePal.where("part=? and onSale=?",choosePart,"1").find(Dishes.class);//查询part和是否上架
}
else{
dishesList= LitePal.where("part = ?",choosePart).find(Dishes.class);//查询part和是否上架
}
DishAdapter adapter=new DishAdapter(ClientPage.this,R.layout.dish_menu,dishesList);
listView=findViewById(R.id.list_view);
listView.setAdapter(adapter);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
//下拉列表选择是否只显示上架的菜品///
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String str=parent.getItemAtPosition(position).toString();
switch (str){
case "显示全部"://暂时用数字编号代替
showOnSale=false;
break;
case "只显示上架":
showOnSale=true;
break;
default:
showOnSale=false;
break;
}
if(showOnSale){
dishesList= LitePal.where("part=? and onSale=?",choosePart,"1").find(Dishes.class);//查询part和是否上架
}
else{
dishesList= LitePal.where("part = ?",choosePart).find(Dishes.class);//查询part和是否上架
}
DishAdapter adapter=new DishAdapter(ClientPage.this,R.layout.dish_menu,dishesList);
listView=findViewById(R.id.list_view);
listView.setAdapter(adapter);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
/ListView点击事件/
listView.setOnItemClickListener(new listViewListener(tempUser));
}
public class listViewListener implements AdapterView.OnItemClickListener{
private User user;
private listViewListener(User user){
this.user=user;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Dishes dishes=dishesList.get(position);
Intent intent=new Intent(ClientPage.this,DetailsPage.class);
Bundle bundle=new Bundle();
bundle.putSerializable("dishes",dishes);
bundle.putSerializable("user",user);
intent.putExtras(bundle);
startActivity(intent);
}
}
///listView初始化///
private void initDishes(){
dishesList= LitePal.where("part=?","益新一楼").find(Dishes.class);
}
}
layout:activity_client_page.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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ClientPage">
<Spinner
android:id="@+id/choose_part"
android:gravity="center"
android:layout_marginTop="10dp"
android:spinnerMode="dropdown"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<Spinner
android:id="@+id/choose_onsale"
android:gravity="center"
android:layout_marginTop="10dp"
android:spinnerMode="dropdown"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
ListView的layout:dish_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/dish_pic"
android:layout_width="60dp"
android:layout_height="45dp" />
<TextView
android:id="@+id/dish_name"
android:text="菜名"
android:textSize="25sp"
android:paddingLeft="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/dish_pic"/>
<TextView
android:id="@+id/dish_price"
android:text="售价:7.5元"
android:layout_width="100dp"
android:paddingLeft="10dp"
android:layout_height="wrap_content"
android:layout_below="@id/dish_name"
android:layout_toRightOf="@id/dish_pic" />
<TextView
android:id="@+id/dish_grade"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:layout_marginEnd="36dp"
android:gravity="center"
android:text="0/10"
android:layout_alignBottom="@id/dish_price"
android:textSize="28sp"
android:layout_alignParentRight="true"
android:layout_marginRight="36dp" />
</RelativeLayout>
Dishadapter
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import org.litepal.LitePal;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.List;
public class DishAdapter extends ArrayAdapter<Dishes> {
private int resourceId;
// private double price;
// private String name;
// private double grade;
public DishAdapter(@NonNull Context context, int resource, @NonNull List<Dishes> objects) {
super(context, resource, objects);
resourceId = resource;
}
class ViewHolder{
TextView dishName;
TextView dishPrice;
TextView dishGrade;
ImageView dishPicture;
}
public View getView(int position, View convertView, ViewGroup parent) {
Dishes dish = getItem(position);
View view;// 优化
ViewHolder viewHolder;
if(convertView==null){
view=LayoutInflater.from(getContext()).inflate(resourceId, parent, false);
viewHolder=new ViewHolder();
viewHolder.dishName=view.findViewById(R.id.dish_name);
viewHolder.dishPrice=view.findViewById(R.id.dish_price);
viewHolder.dishGrade=view.findViewById(R.id.dish_grade);
viewHolder.dishPicture=view.findViewById(R.id.dish_pic);
view.setTag(viewHolder);
}else{
view=convertView;
viewHolder=(ViewHolder)view.getTag();
}
double AverGrade= LitePal.where("dishes_id = ?",String.valueOf(dish.getId())).average(Comment.class,"grade");
BigDecimal b=new BigDecimal(AverGrade);
AverGrade=b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
viewHolder.dishName.setText(dish.getName());
viewHolder.dishPrice.setText("售价:"+String.valueOf(dish.getPrice())+"元");
viewHolder.dishGrade.setText(String.valueOf(AverGrade) + "/5.0");
viewHolder.dishPicture.setImageBitmap(decodeBitmap(dish.getPicturePath()));
return view;
}
public Bitmap decodeBitmap(String filePath){
BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize=4;
Bitmap bitmap=BitmapFactory.decodeFile(filePath,options);
return bitmap;
}
}