package com.example.drink_order_system; import static com.example.drink_order_system.Drinks.all_drinks; import static com.example.drink_order_system.Restaurant.all_restaurant; import android.app.AlertDialog; import android.content.Context; import android.os.Bundle; import android.app.Fragment; import android.util.Log; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Adapter; import android.widget.ImageView; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.SearchView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.squareup.picasso.Picasso; import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashSet; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class OrderFragment extends Fragment { Right_adapter rightAdapter; private ArrayList drinks_array = new ArrayList(); //可选的饮品列表 private ArrayList titles_array = new ArrayList(); //饮品类别列表 private RecyclerView right_listView; //右侧饮品列表 private RecyclerView left_listView; //左侧类别列表 private LinearLayoutManager right_llM; private TextView right_title; private SearchView searchView; private String restaurantName; private AlertDialog chooseDialog = null; private AlertDialog.Builder builder = null; private View view_choose; private Context mContext = this.getActivity(); public OrderFragment() { // Required empty public constructor } public static OrderFragment newInstance(String restaurantName) { OrderFragment fragment = new OrderFragment(); Bundle args = new Bundle(); args.putString("restaurantName", restaurantName); fragment.setArguments(args); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_order, container, false); SearchView mSearch = (SearchView) view.findViewById(R.id.my_search); int id = mSearch.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); TextView text_search = (TextView) mSearch.findViewById(id); text_search.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); if (getArguments() != null) { restaurantName = getArguments().getString("restaurantName"); } right_title = (TextView) view.findViewById(R.id.Top_drinkType); right_listView = (RecyclerView) view.findViewById(R.id.rec_right); left_listView = (RecyclerView) view.findViewById(R.id.rec_left); searchView = (SearchView) view.findViewById(R.id.my_search); builder = new AlertDialog.Builder(this.getActivity()); view_choose = inflater.inflate(R.layout.dialogue_choose, null, false); builder.setView(view_choose); builder.setCancelable(false); chooseDialog = builder.create(); view_choose.findViewById(R.id.button_exit).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { chooseDialog.dismiss(); } }); view_choose.findViewById(R.id.button_buy).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TextView drinkName = view_choose.findViewById(R.id.choose_drinkName); //写买进购物车的逻辑 System.out.println("drinkName:" + String.valueOf(drinkName.getText()).split(" #")[0]); Drinks drink = new Drinks(Integer.parseInt(String.valueOf(drinkName.getText()).split(" #")[1])); TextView numberTV = (TextView) view_choose.findViewById(R.id.textView_drinkNumber); int number = Integer.parseInt((String) numberTV.getText()); Ordered_drinks od = new Ordered_drinks(drink, number,restaurantName); chooseDialog.dismiss(); } }); view_choose.findViewById(R.id.button_subtract).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TextView numberText = (TextView) view_choose.findViewById(R.id.textView_drinkNumber); int i = Integer.parseInt(String.valueOf(numberText.getText())); if (i > 1) { i--; } numberText.setText(String.valueOf(i)); } }); view_choose.findViewById(R.id.button_add).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TextView numberText = (TextView) view_choose.findViewById(R.id.textView_drinkNumber); int i = Integer.parseInt(String.valueOf(numberText.getText())); if (i < 100) { i++; } numberText.setText(String.valueOf(i)); } }); right_llM = new LinearLayoutManager(this.getActivity()); right_listView.setLayoutManager(right_llM); rightAdapter = new Right_adapter(inflater, drinks_array); right_listView.setAdapter(rightAdapter); initData(); left_listView.setLayoutManager(new LinearLayoutManager(this.getActivity())); LeftAdapter leftAdapter = new LeftAdapter(titles_array); left_listView.setAdapter(leftAdapter); right_listView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); int firstItemPosition = right_llM.findFirstVisibleItemPosition(); leftAdapter.setCurrentPosition(firstItemPosition); if (leftAdapter.getCurrentTitle() != "") { right_title.setText(leftAdapter.getCurrentTitle()); } } }); leftAdapter.setOnItemClickListener(new LeftAdapter.OnItemClickListener() { @Override public void onItemClicked(int rightPosition) { if (right_llM != null) { right_llM.scrollToPositionWithOffset(rightPosition, 0); } } }); rightAdapter.buttonSetOnClick(new Right_adapter.MyClickListener() { @Override public void onclick(View v, int position) { chooseDialog.show(); if (view_choose != null) { Drinks drink = drinks_array.get(position); ImageView img = view_choose.findViewById(R.id.choose_drink_img); Picasso.get().load(drink.get_imagePath()).into(img); TextView name = view_choose.findViewById(R.id.choose_drinkName); name.setText(drink.get_name() + " #" + (drink.get_number() + 1)); TextView intro = view_choose.findViewById(R.id.choose_drinkIntro); intro.setText(drink.get_introduction()); TextView drink_number = view_choose.findViewById(R.id.textView_drinkNumber); drink_number.setText("1"); } } }); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String queryText) { for (int i = 0; i < drinks_array.size(); i++) { if (drinks_array.get(i).get_name().contains(queryText)) { if (right_llM != null) { right_llM.scrollToPositionWithOffset(i, 0); break; } } } return true; } }); return view; } private void initData() { String url = "http://192.168.43.176:8080/warehouse_management_system_war_exploded/getGoods"; Log.i("restaurantName",restaurantName); OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url+"?Sname="+restaurantName) .build(); Log.i("url",url+"?Sname="+restaurantName); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); Log.i("onFailure","onFailure"); // 处理请求失败 } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { String responseData = response.body().string(); getActivity().runOnUiThread(() -> { Log.i("isSuccessful","isSuccessful"); Log.i("responseData",responseData); Gson gson = new Gson(); Type DrinksListType = new TypeToken>() {}.getType(); ArrayList drinks = gson.fromJson(responseData, DrinksListType); // 对饮品列表进行排序,先非主食后主食 ArrayList mainDishArray = new ArrayList<>(); ArrayList nonMainDishArray = new ArrayList<>(); for (Drinks drink : drinks) { if ("主食".equals(drink.get_type())) { mainDishArray.add(drink); } else { nonMainDishArray.add(drink); } } nonMainDishArray.addAll(mainDishArray); drinks_array.clear(); drinks_array.addAll(nonMainDishArray); all_drinks.clear(); all_drinks.addAll(nonMainDishArray); // 更新为排序后的饮品列表 rightAdapter.notifyDataSetChanged(); Log.i("drinks_array",String.valueOf(drinks_array.size())); HashSet titleSet = new HashSet<>(); // 用于检查标题是否已经存在 for (int i = 0; i < drinks_array.size(); i++) { Drinks temp = drinks_array.get(i); if (temp.get_type() != null && !titleSet.contains(temp.get_type())) { titles_array.add(new LeftBean(i, temp.get_type())); titleSet.add(temp.get_type()); // 将标题添加到集合中 } } // titles_array.get(0).setSelect(true); }); } else { // 处理请求失败 } } }); } }