From 514493afe7cf1c75e3f8465fc0b1d05e511fb3a2 Mon Sep 17 00:00:00 2001 From: wanghao Date: Wed, 22 Apr 2026 17:51:33 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=98=BE=E7=A4=BA=E5=A4=9A?= =?UTF-8?q?=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 3 + .../tyre/maintenance/WorkExecuteActivity.java | 2 +- .../adapter/DisposalFileAdapter.java | 92 +++++++++++++++ .../maintenance/been/CheckInstanceFiles.java | 37 ++++++ .../maintenance/dialog/TireUpdateDialog.java | 32 +++-- .../main/res/layout/dialog_tire_update.xml | 111 +++++++++++++++--- app/src/main/res/layout/item_disposal_img.xml | 38 ++++++ app/src/main/res/mipmap-xhdpi/ic_cha1.png | Bin 0 -> 1683 bytes .../main/res/mipmap-xhdpi/ic_picture_err.png | Bin 0 -> 11139 bytes 9 files changed, 292 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/com/example/tyre/maintenance/adapter/DisposalFileAdapter.java create mode 100644 app/src/main/java/com/example/tyre/maintenance/been/CheckInstanceFiles.java create mode 100644 app/src/main/res/layout/item_disposal_img.xml create mode 100644 app/src/main/res/mipmap-xhdpi/ic_cha1.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_picture_err.png diff --git a/app/build.gradle b/app/build.gradle index 857140d..4667ad0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -54,4 +54,7 @@ dependencies { implementation files('libs/SerialPort.jar') implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation 'com.google.android.material:material:1.11.0' + implementation 'com.github.xuexiangjys:XUpdate:2.1.4' + implementation 'com.github.xuexiangjys.XUpdateAPI:xupdate-easy:1.0.1' + implementation 'com.github.bumptech.glide:glide:4.16.0' } diff --git a/app/src/main/java/com/example/tyre/maintenance/WorkExecuteActivity.java b/app/src/main/java/com/example/tyre/maintenance/WorkExecuteActivity.java index 12cf3cd..dd79922 100644 --- a/app/src/main/java/com/example/tyre/maintenance/WorkExecuteActivity.java +++ b/app/src/main/java/com/example/tyre/maintenance/WorkExecuteActivity.java @@ -296,7 +296,7 @@ public class WorkExecuteActivity extends BaseActivity { public void tekePhotoResult(String fileUrl, File file) { super.tekePhotoResult(fileUrl, file); Log.e("TAG", "拍照成功,路径是:" + fileUrl); - tireUpdateDialog.setImage(file); + tireUpdateDialog.setImage(fileUrl,file); } // 删除实时表、卸车记录表 diff --git a/app/src/main/java/com/example/tyre/maintenance/adapter/DisposalFileAdapter.java b/app/src/main/java/com/example/tyre/maintenance/adapter/DisposalFileAdapter.java new file mode 100644 index 0000000..8831994 --- /dev/null +++ b/app/src/main/java/com/example/tyre/maintenance/adapter/DisposalFileAdapter.java @@ -0,0 +1,92 @@ +package com.example.tyre.maintenance.adapter; + +import android.content.Context; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + + +import com.bumptech.glide.Glide; +import com.example.tyre.BR; +import com.example.tyre.R; +import com.example.tyre.databinding.ItemDisposalImgBinding; +import com.example.tyre.maintenance.been.CheckInstanceFiles; + +import java.util.List; + +/** + * @author wanghao + * @date 2024/3/11 + */ +public class DisposalFileAdapter extends RecyclerView.Adapter { + private List list; + private static Context context; + private LayoutInflater inflater; + private ItemClickCall clickCall; + private boolean delectState=false; + + public void setDelectState(boolean delectState) { + this.delectState = delectState; + } + + public DisposalFileAdapter(Context context, ItemClickCall clickCall) { + this.context = context; + this.clickCall = clickCall; + inflater = LayoutInflater.from(context); + } + + public void setList(List list) { + this.list = list; + } + + @NonNull + @Override + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + ItemDisposalImgBinding binding = DataBindingUtil.inflate(inflater, R.layout.item_disposal_img, parent, false); + return new MyViewHolder(binding); + } + + // @SuppressLint("CheckResult") + @Override + public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { + var outstock = list.get(position); + var binding = holder.binding; + binding.setVariable(BR.vm,outstock); + Log.e("TAG", "onBindViewHolder:" + outstock.isState()); + Glide.with(context) + .load(outstock.getFaultFile()) + .into(binding.disFile); + binding.disFile.setOnClickListener(v -> clickCall.onClick(position,true)); + if (delectState){ + binding.disposalDelect.setVisibility(View.GONE); + }else{ + binding.disposalDelect.setVisibility(View.VISIBLE); + binding.disposalDelect.setOnClickListener(v -> clickCall.onClick(position,false)); + } + + } + + @Override + public int getItemCount() { + return list==null?0:list.size(); + } + + class MyViewHolder extends RecyclerView.ViewHolder { + private ItemDisposalImgBinding binding; + + public MyViewHolder(ItemDisposalImgBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + + } + public interface ItemClickCall { + void onClick(int position,boolean type); + } +} diff --git a/app/src/main/java/com/example/tyre/maintenance/been/CheckInstanceFiles.java b/app/src/main/java/com/example/tyre/maintenance/been/CheckInstanceFiles.java new file mode 100644 index 0000000..0f50df0 --- /dev/null +++ b/app/src/main/java/com/example/tyre/maintenance/been/CheckInstanceFiles.java @@ -0,0 +1,37 @@ +package com.example.tyre.maintenance.been; + +import androidx.databinding.BaseObservable; + +/** + * @author wanghao + * 图片用 + * @date 2024/3/11 10:00 + */ +public class CheckInstanceFiles extends BaseObservable { + private String faultFile; + private boolean state=false; + + public boolean isState() { + return state; + } + + public void setState(boolean state) { + this.state = state; + + } + + public String getFaultFile() { + return faultFile; + } + + public void setFaultFile(String faultFile) { + this.faultFile = faultFile; + } + + @Override + public String toString() { + return "CheckInstanceFiles{" + + "faultFile='" + faultFile + '\'' + + '}'; + } +} diff --git a/app/src/main/java/com/example/tyre/maintenance/dialog/TireUpdateDialog.java b/app/src/main/java/com/example/tyre/maintenance/dialog/TireUpdateDialog.java index 4b5c702..83732f9 100644 --- a/app/src/main/java/com/example/tyre/maintenance/dialog/TireUpdateDialog.java +++ b/app/src/main/java/com/example/tyre/maintenance/dialog/TireUpdateDialog.java @@ -22,10 +22,13 @@ import androidx.databinding.ObservableBoolean; import com.example.tyre.R; import com.example.tyre.databinding.DialogTireUpdateBinding; +import com.example.tyre.maintenance.adapter.DisposalFileAdapter; import com.example.tyre.maintenance.been.BaseTyre; import com.example.tyre.maintenance.been.BizOrderTireDetail; +import com.example.tyre.maintenance.been.CheckInstanceFiles; import java.io.File; +import java.util.ArrayList; import java.util.List; public class TireUpdateDialog extends Dialog { @@ -36,7 +39,7 @@ public class TireUpdateDialog extends Dialog { private BizOrderTireDetail newTireDetail;// 新轮胎 private TireUpdateDialogSaveListener listener; private File image; - private ObservableBoolean photoState; + // private ObservableBoolean photoState; private TireChangeDialog tireChangeDialog;// 同车轮胎互换弹窗 private List baseTyreList; private BaseTyre newBaseTyre; @@ -100,8 +103,8 @@ public class TireUpdateDialog extends Dialog { // 拍照按钮点击事件 binding.dialogUpdatePhoto.setOnClickListener(view -> listener.onTakePhoto()); - photoState = new ObservableBoolean(false); - binding.setPhotoState(photoState); + // photoState = new ObservableBoolean(false); + // binding.setPhotoState(photoState); setContentView(binding.getRoot()); tireChangeDialog = new TireChangeDialog(context, new TireChangeDialog.TireChangeListener() { @Override @@ -111,7 +114,12 @@ public class TireUpdateDialog extends Dialog { }); + disposalFileAdapter=new DisposalFileAdapter(context, new DisposalFileAdapter.ItemClickCall() { + @Override + public void onClick(int position, boolean type) { + } + }); } // 换新胎了 @@ -151,8 +159,9 @@ public class TireUpdateDialog extends Dialog { newTireDetail.setDataType("换新胎,装车"); newTireDetail.setTireStatus("换新胎,装车"); // 重置ui - photoState.set(false); + // photoState.set(false); binding.dialogUpdatePhoto.setImageResource(R.mipmap.ic_xiangji); + filesList=new ArrayList<>(); show(); } @@ -180,11 +189,18 @@ public class TireUpdateDialog extends Dialog { // 点击外部不关闭 setCanceledOnTouchOutside(false); } - - public void setImage(File image) { + private DisposalFileAdapter disposalFileAdapter; + private List filesList ; + public void setImage(String fileUrl,File image) { this.image = image; - photoState.set(true); - binding.dialogUpdatePhoto.setImageResource(R.mipmap.ic_duihao); + // photoState.set(true); + // binding.dialogUpdatePhoto.setImageResource(R.mipmap.ic_duihao); + CheckInstanceFiles checkInstanceFiles = new CheckInstanceFiles(); + checkInstanceFiles.setFaultFile(fileUrl); + checkInstanceFiles.setState(true); + filesList.add(checkInstanceFiles); + disposalFileAdapter.notifyDataSetChanged(); + } public interface TireUpdateDialogSaveListener { diff --git a/app/src/main/res/layout/dialog_tire_update.xml b/app/src/main/res/layout/dialog_tire_update.xml index 7dfd07b..d86a120 100644 --- a/app/src/main/res/layout/dialog_tire_update.xml +++ b/app/src/main/res/layout/dialog_tire_update.xml @@ -161,6 +161,27 @@ android:textColor="@color/textColor1" app:layout_columnWeight="1" /> + + + + + + + @@ -290,7 +311,50 @@ android:layout_height="40dp" android:layout_marginTop="8dp" android:gravity="left|center" - android:text="胎压" + android:text="保养前胎压" + android:textColor="@color/textColor1" + app:layout_columnWeight="1" /> + + + + + + + + + + + @@ -338,16 +402,35 @@ app:layout_columnWeight="1" /> - + android:orientation="horizontal" + app:layout_columnSpan="2"> + + + + + + android:textColor="@color/textColor1" + app:layout_columnWeight="1" /> + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xhdpi/ic_cha1.png b/app/src/main/res/mipmap-xhdpi/ic_cha1.png new file mode 100644 index 0000000000000000000000000000000000000000..d692a5f7fcf917e38184fed84fd982ec1620cf1f GIT binary patch literal 1683 zcmV;E25k9>P)Px*O-V#SRCr$PTWf3-RTw?ruCzoTCK^(MA)w+T2<@~r5J~WX5iuBqs03q;VuX+q zh3+hV01GNzUTxRiO~q)$|wb9b1`EF$FP21 zir$VQPr(M%*t`HhBLU;15Twe%gwGhgMtrD>35qMo0L$i003IwvK*3nX65&$Hl*h<` zv5h>m;zDc(<9gG?k>Us&M2h6_({9=ZR3~{HG4>EJSUX#B0b7Mbcj>0kGN7)B$M`Y) zq?@E<@r=)fOSkLfQ#PPF$wOj{6FTJm63bXATzX11x3U42&7T0cLzTEcT0k}>R zmoNMf7!@E4H{fg+4$am!z_R%r06Bp<2;ZU#Eb4rQ{;(2!F9`1%2tFIam@Qmtm;bbE zmUs5~+MF>=7cC^8Vtra*52#+ub+I_U*G|NkD_oN6gWguK2^qzo;k22xbrIeaDY{?T z04u>s5L&boF;)ndnlo|6CIlD16u@e2UBI!*VHml)nT};+1A9PCff(j|15Ntldge@XPGediTmE`F?%iNEQi%$bh z3NgW`3+=w@H&nK_Q+Fn$PY4t)`3z)JugG0%~OR4Gg) zCK^Ev!l5_94A=r-Ml|_Ov*atVbj5=iw&#)?X23206C*Vs&y6uX$vN|!*L`AW2qnhq zPM4ktGvEM#%Qbk_Lj$gMBy$FJ1sjD!4~H2bcYTJab81HBFu{1jq?i6<;n1C72FN+U zP(5Ca=mB8B&qX`k>E|K9gjc*2o%MtZng{FzFiGQ@s)gpb+n4et*fYCbB^+9we+VS_ zeGq1;RizkJCXYcPEb2_r+PntT*t~%NdEOUIQ+dv-#6+Nm8FM_BC@O^s0o!AJ45+iY-Uq%b*Z`A)Ofc#~4-1Db%MK6R53p>OdwL_(xw9e*DWni= z9>EMao5obe1V*aXx2 z(~rWTYl7+t90IjAk7D4Ut^ojM35PbPamK}`39?ME7V~Jt@vE*bW~}vG3Ow4&c`i_s zV220^&1CD*jTX^H2MaDfzy!^n6DE9yvSi6)*aCh&q*eK0}axKvX zV2ma%XE*~#=+qwN#oC;NHj$#HT)4bvgS9q4%D`DOCv5@!3pjfE>gRl^Bm8vO=C1(U z*uQlcXYVujS9%I$2Gu5b1{35q*+6T*u#cO(R+4j?oGr8m^xh8={45h5A5aeXm?>H* z^uj3_APcu_mXnB^2Z#yFg+r@Uv??1Q$!cu=vkYI4%dYcf;m|yl;$@7M0rgEhzB`7Z zytS<=I3(^%;m~b5Tv`V7-VdJS;rutgE!wu3j{3}4Mze5fg)Us%fOLX#dVPi%_jJ1S zo^J8lLm)eWWwU%g_j!}V5n=ZGKIZLfr5&bx#yudNur|pz_&#hR+-)kt2uEo9*N6Lq zOTQc8PlF0JAj60`4A@0~gPiaIGhEN1uL~(Wjg8CzNmxIh2l>Nb_bjF5iY;*cZ7Q09 zT?DMlKHW9tD~bV`VypzqvjzFl)D$L6))gvOfISnh4lp|6jBR^cNgmil-XiS*xzx!I zECy9#5@Nld%~hrU%FpQF<0KQh=+x(OM|?t8%*TOFm%PZU4InIu0i`I!G{<=ZOr86` d;LiCT@E>c3mtXz}4?q9_002ovPDHLkV1lq+`>_B3 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_picture_err.png b/app/src/main/res/mipmap-xhdpi/ic_picture_err.png new file mode 100644 index 0000000000000000000000000000000000000000..f788c231cc3635d402a7866ddb3372252166312d GIT binary patch literal 11139 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