From a45040d9df1029594a5366194bf0fa8fc65b7856 Mon Sep 17 00:00:00 2001 From: wanghao Date: Wed, 26 Mar 2025 17:34:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E9=97=AE=E9=A2=983?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- app/src/main/assets/litepal.xml | 2 +- .../com/example/as_trak/LoadMainActivity.java | 20 +++++- .../com/example/as_trak/LoadScanActivity.java | 68 +++++++++--------- .../com/example/as_trak/MainActivity.java | 4 +- .../as_trak/adapter/CargoListAdapter.java | 5 +- .../as_trak/adapter/LoadInfoAdapter.java | 41 +++++++++-- .../example/as_trak/dialog/EditDialog.java | 1 - .../com/example/as_trak/dialog/TipDialog.java | 54 ++++++++++++++ app/src/main/res/drawable/bg_suecss.xml | 6 ++ .../main/res/layout/activity_load_scan.xml | 58 ++++----------- app/src/main/res/layout/dialog_tip.xml | 58 +++++++++++++++ app/src/main/res/layout/item_cargo_list.xml | 2 +- app/src/main/res/layout/item_load_info.xml | 28 ++------ app/src/main/res/layout/toast_load.xml | 1 + app/src/main/res/menu/popup_menu.xml | 11 +++ app/src/main/res/mipmap-hdpi/ic_yes.png | Bin 0 -> 11041 bytes app/src/main/res/raw/success.mp3 | Bin 0 -> 19226 bytes app/src/main/res/values/themes.xml | 1 + 19 files changed, 247 insertions(+), 115 deletions(-) create mode 100644 app/src/main/java/com/example/as_trak/dialog/TipDialog.java create mode 100644 app/src/main/res/drawable/bg_suecss.xml create mode 100644 app/src/main/res/layout/dialog_tip.xml create mode 100644 app/src/main/res/menu/popup_menu.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_yes.png create mode 100644 app/src/main/res/raw/success.mp3 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2bf3234..eccc6f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,7 +4,7 @@ - + - + diff --git a/app/src/main/java/com/example/as_trak/LoadMainActivity.java b/app/src/main/java/com/example/as_trak/LoadMainActivity.java index 4bba135..dd49d45 100644 --- a/app/src/main/java/com/example/as_trak/LoadMainActivity.java +++ b/app/src/main/java/com/example/as_trak/LoadMainActivity.java @@ -45,7 +45,8 @@ public class LoadMainActivity extends BaseActivity implements AddFlightDialog.Ad private ActivityLoadMainBinding binding; private ObservableInt cargoQty; private ObservableInt loadQty; - + private androidx.appcompat.app.AlertDialog.Builder alertDialog; + private String[] loadStateList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -66,6 +67,22 @@ public class LoadMainActivity extends BaseActivity implements AddFlightDialog.Ad builder = new AlertDialog.Builder(this); builder.setTitle("删除确认").setMessage("是否确定删除装载单元").setNegativeButton("取消", null); + initAlertDialog(); + + } + + private void initAlertDialog() { + loadStateList = getResources().getStringArray(R.array.loadState); + alertDialog = new androidx.appcompat.app.AlertDialog.Builder(this); + alertDialog.setTitle("选择装载量") + .setItems(loadStateList, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Toast.makeText(LoadMainActivity.this, "装载完成", Toast.LENGTH_SHORT).show(); + + + } + }).setNegativeButton("取消", null).create(); } // 初始化航班添加 @@ -147,6 +164,7 @@ public class LoadMainActivity extends BaseActivity implements AddFlightDialog.Ad public void saveNumber(View view) { flightInfoTag.setJieguiQty(binding.loadMainJieguiQty.getText().toString()); flightInfoTag.update(flightInfoTag.getId()); + Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show(); } // 关闭货箱添加 public void loadCloseEdit(View view) { diff --git a/app/src/main/java/com/example/as_trak/LoadScanActivity.java b/app/src/main/java/com/example/as_trak/LoadScanActivity.java index fb3edd2..b08e818 100644 --- a/app/src/main/java/com/example/as_trak/LoadScanActivity.java +++ b/app/src/main/java/com/example/as_trak/LoadScanActivity.java @@ -19,6 +19,7 @@ import com.example.as_trak.adapter.CargoListAdapter; import com.example.as_trak.adapter.LoadInfoAdapter; import com.example.as_trak.base.BaseActivity; import com.example.as_trak.databinding.ActivityLoadScanBinding; +import com.example.as_trak.dialog.TipDialog; import com.example.as_trak.dialog.UpdataDialog; import com.example.as_trak.entity.CargoInfo; import com.example.as_trak.entity.FlightInfo; @@ -37,39 +38,41 @@ public class LoadScanActivity extends BaseActivity implements CargoListAdapter.C private List loadOperations; private CargoInfo cargoInfoTag; private FlightInfo flightInfo; - private LoadToast loadToast; + // private LoadToast loadToast; private LoadInfoAdapter loadInfoAdapter; // 定义时间格式 private DateTimeFormatter formatter; private UpdataDialog updataDialog; // 装载完成对话框 + + private TipDialog tipDialog; private AlertDialog.Builder alertDialog; - private String[] loadStateList; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - com.example.as_trak.databinding.ActivityLoadScanBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_load_scan); + ActivityLoadScanBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_load_scan); initScan(); int id = getIntent().getIntExtra("id", 0); flightInfo = LitePal.where("id= ?", String.valueOf(id)).findFirst(FlightInfo.class); - binding.setData(flightInfo); cargoInfoList = LitePal.where("flightId = ?", String.valueOf(id)).find(CargoInfo.class); adapter = new CargoListAdapter(this, this); adapter.setList(cargoInfoList); binding.setAdapter1(adapter); formatter = DateTimeFormatter.ofPattern("HH:mm"); - loadToast = new LoadToast(this); + // loadToast = new LoadToast(this); loadInfoAdapter = new LoadInfoAdapter(this, this); binding.setAdapter2(loadInfoAdapter); binding.loadScanSubmit.setOnLongClickListener(this); initDialog(); } + // 初始化弹窗 @SuppressLint("NotifyDataSetChanged") private void initDialog() { - loadStateList = getResources().getStringArray(R.array.loadState); + updataDialog = new UpdataDialog(this); updataDialog.setUpdataDialogCall((code, index) -> { LoadOperation loadOperation = loadOperations.get(index); @@ -79,23 +82,22 @@ public class LoadScanActivity extends BaseActivity implements CargoListAdapter.C loadOperation.update(loadOperation.getId()); loadInfoAdapter.notifyDataSetChanged(); }); - alertDialog = new AlertDialog.Builder(this); - alertDialog.setTitle("装载完成,选择装载量") - // .setIcon(R.mipmap.ic_launcher) - .setItems(loadStateList, new DialogInterface.OnClickListener() { + tipDialog = new TipDialog(this); + alertDialog=new AlertDialog.Builder(this); + alertDialog.setTitle("装载完成提示") + .setMessage("是否全部修改状态为装载完成") + .setNegativeButton("取消",null) + .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - Toast.makeText(LoadScanActivity.this,"装载完成" , Toast.LENGTH_SHORT).show(); - cargoInfoTag.setState("装载完成"); - cargoInfoTag.update(cargoInfoTag.getId()); - cargoInfoTag.setLoadState(loadStateList[which]); - adapter.notifyDataSetChanged(); - cargoInfoTag = null; - + cargoInfoList.forEach(t -> { + t.setState("装载完成"); + t.update(t.getId()); + }); + Toast.makeText(LoadScanActivity.this, "成功", Toast.LENGTH_SHORT).show(); + finish(); } - }).setNegativeButton("取消", null).create(); - - + }).create(); } // 扫码结果 @@ -107,11 +109,17 @@ public class LoadScanActivity extends BaseActivity implements CargoListAdapter.C Toast.makeText(this, "没有选择装载单元", Toast.LENGTH_SHORT).show(); return; } + if (cargoInfoTag.getState().equals("装载完成")) { + Toast.makeText(this, "装载单元已经装载完成", Toast.LENGTH_SHORT).show(); + return; + } int count = LitePal.where("flightId= ? and luggageCode=? and (state IS NULL or state = '修改') ", String.valueOf(flightInfo.getId()), code).count(LoadOperation.class); if (count > 0) { - loadToast.show("行李条码重复"); + tipDialog.showError("行李条码:" + code + "重复"); return; } + tipDialog.showSuccess("绑定成功"); + LoadOperation loadOperation = new LoadOperation(); loadOperation.setFlightCode(flightInfo.getFlightCode()); loadOperation.setFlightId(flightInfo.getId()); @@ -125,7 +133,8 @@ public class LoadScanActivity extends BaseActivity implements CargoListAdapter.C loadOperation.setLoadTime(formattedTime); loadOperation.setType("装载"); loadOperation.save(); - loadOperations.add(loadOperation); + loadOperations.add(0, loadOperation); + Log.e("TAG", "sanCodeResult:" + loadOperations.toString()); loadInfoAdapter.notifyDataSetChanged(); int size = loadOperations.size(); Log.e("TAG", "更新的id:" + cargoInfoTag.getId() + "数量:" + size); @@ -135,12 +144,12 @@ public class LoadScanActivity extends BaseActivity implements CargoListAdapter.C } - // 点击箱子 + // 点击装载单元 @Override public void clickCargoInfo(int index) { cargoInfoTag = cargoInfoList.get(index); // Log.e("TAG", "clickCargoInfo:" + cargoInfoTag.toString()); - loadOperations = LitePal.where("cargoId =? and type = ? and (state IS NULL or state = '修改') ", String.valueOf(cargoInfoTag.getId()), "正常").find(LoadOperation.class); + loadOperations = LitePal.where("cargoId =? and type = ? and (state IS NULL or state = '修改') ", String.valueOf(cargoInfoTag.getId()), "装载").find(LoadOperation.class); loadInfoAdapter.setList(loadOperations); loadInfoAdapter.notifyDataSetChanged(); } @@ -169,21 +178,10 @@ public class LoadScanActivity extends BaseActivity implements CargoListAdapter.C } - public void loadOverupdate(View view) { - CargoInfo cargoInfo = new CargoInfo(); - cargoInfo.setState("装载中"); - cargoInfo.updateAll(); - - } - - // 装载完毕 @Override @SuppressLint("NotifyDataSetChanged") public boolean onLongClick(View v) { - if (cargoInfoTag == null) { - return false; - } alertDialog.show(); return true; } diff --git a/app/src/main/java/com/example/as_trak/MainActivity.java b/app/src/main/java/com/example/as_trak/MainActivity.java index 5214de3..ff7f993 100644 --- a/app/src/main/java/com/example/as_trak/MainActivity.java +++ b/app/src/main/java/com/example/as_trak/MainActivity.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.os.Bundle; import android.view.View; +import com.example.as_trak.dialog.TipDialog; import com.example.as_trak.toast.LoadToast; public class MainActivity extends AppCompatActivity { @@ -14,7 +15,6 @@ public class MainActivity extends AppCompatActivity { private Intent intent3; private Intent intent4; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -23,6 +23,8 @@ public class MainActivity extends AppCompatActivity { intent2 = new Intent(this, UnLoadActivity.class); intent3 = new Intent(this, InfoActivity.class); intent4 = new Intent(this, SettingActivity.class); + + } diff --git a/app/src/main/java/com/example/as_trak/adapter/CargoListAdapter.java b/app/src/main/java/com/example/as_trak/adapter/CargoListAdapter.java index f32ae48..b2ff828 100644 --- a/app/src/main/java/com/example/as_trak/adapter/CargoListAdapter.java +++ b/app/src/main/java/com/example/as_trak/adapter/CargoListAdapter.java @@ -64,9 +64,10 @@ public class CargoListAdapter extends RecyclerView.Adapter { if (tag != -1) { diff --git a/app/src/main/java/com/example/as_trak/adapter/LoadInfoAdapter.java b/app/src/main/java/com/example/as_trak/adapter/LoadInfoAdapter.java index 102d0d8..fbf73b1 100644 --- a/app/src/main/java/com/example/as_trak/adapter/LoadInfoAdapter.java +++ b/app/src/main/java/com/example/as_trak/adapter/LoadInfoAdapter.java @@ -1,8 +1,16 @@ package com.example.as_trak.adapter; +import android.annotation.SuppressLint; import android.content.Context; +import android.view.Gravity; import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.PopupMenu; +import android.widget.PopupWindow; +import android.widget.TextView; import androidx.annotation.NonNull; import androidx.databinding.DataBindingUtil; @@ -41,11 +49,14 @@ public class LoadInfoAdapter extends RecyclerView.Adapter call.deleteCargoInfo(position)); + // binding.itemLoadD.setOnClickListener(v -> call.deleteCargoInfo(position)); binding.itemLoadU.setOnLongClickListener(v -> { - call.updateCargoInfo(position); + // call.updateCargoInfo(position); + + showPopupMenu(v, position); + // showPopupWindow(v); return true; }); } @@ -69,8 +80,30 @@ public class LoadInfoAdapter extends RecyclerView.Adapter dismiss()); diff --git a/app/src/main/java/com/example/as_trak/dialog/TipDialog.java b/app/src/main/java/com/example/as_trak/dialog/TipDialog.java new file mode 100644 index 0000000..23b0e36 --- /dev/null +++ b/app/src/main/java/com/example/as_trak/dialog/TipDialog.java @@ -0,0 +1,54 @@ +package com.example.as_trak.dialog; + + +import android.app.Dialog; +import android.content.Context; +import android.database.Observable; +import android.media.MediaPlayer; +import android.os.Vibrator; +import android.view.LayoutInflater; + +import androidx.annotation.NonNull; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableBoolean; +import androidx.databinding.ViewDataBinding; + +import com.example.as_trak.R; +import com.example.as_trak.databinding.DialogTipBinding; + +public class TipDialog extends Dialog { + private MediaPlayer music; + private MediaPlayer musicSuccess; + private Vibrator vibrator; + private ObservableBoolean state; + private DialogTipBinding binding; + + public TipDialog(@NonNull Context context) { + super(context, R.style.dialog_style); + music = MediaPlayer.create(context, R.raw.error); + musicSuccess = MediaPlayer.create(context, R.raw.success); + vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); + binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.dialog_tip, null, false); + setContentView(binding.getRoot()); + state = new ObservableBoolean(); + setCanceledOnTouchOutside(false); + binding.setState(state); + binding.tipDialogOver.setOnClickListener(v -> dismiss()); + } + + + public void showError(String msg) { + super.show(); + music.start(); + vibrator.vibrate(500); // 震动1/2秒 + state.set(false); + binding.toastMsg.setText(msg); + } + + public void showSuccess(String msg) { + super.show(); + musicSuccess.start(); + state.set(true); + binding.toastMsg.setText(msg); + } +} diff --git a/app/src/main/res/drawable/bg_suecss.xml b/app/src/main/res/drawable/bg_suecss.xml new file mode 100644 index 0000000..4b3fbed --- /dev/null +++ b/app/src/main/res/drawable/bg_suecss.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_load_scan.xml b/app/src/main/res/layout/activity_load_scan.xml index 91173c5..e19bba0 100644 --- a/app/src/main/res/layout/activity_load_scan.xml +++ b/app/src/main/res/layout/activity_load_scan.xml @@ -51,7 +51,7 @@ android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" - android:text="@{data.takeoffDate + data.takeoffTime}" + android:text='@{data.takeoffDate+" "+data.takeoffTime}' android:textSize="20sp" /> - - - @@ -172,45 +156,31 @@ -