From 092bf21368ea824e9dc22467166960219165dc00 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期五, 21 二月 2025 17:32:59 +0800
Subject: [PATCH] 1.我的界面每个item添加点击效果。 2.更新本地数据添加二次确认。
---
app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java | 159 +++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 124 insertions(+), 35 deletions(-)
diff --git a/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java b/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java
index f2f00db..94c9611 100644
--- a/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java
+++ b/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java
@@ -2,10 +2,12 @@
import android.content.Context;
import android.net.Uri;
+import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
+import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -14,7 +16,10 @@
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.dayu.pipirrapp.R;
+import com.dayu.pipirrapp.bean.net.UplodFileState;
import com.dayu.pipirrapp.listener.OnItemLongClickListener;
+import com.dayu.pipirrapp.utils.MyLog;
+import com.king.view.circleprogressview.CircleProgressView;
import com.luck.picture.lib.config.PictureMimeType;
import com.luck.picture.lib.config.SelectMimeType;
import com.luck.picture.lib.entity.LocalMedia;
@@ -22,6 +27,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
/**
* AddPictureAdapter -
@@ -37,26 +43,16 @@
public static final int TYPE_PICTURE = 2;
private final LayoutInflater mInflater;
private final ArrayList<LocalMedia> list = new ArrayList<>();
+ Map<String, UplodFileState> fileStates;
private int selectMax = 9;
+ private final Context mContext;
- /**
- * 鍒犻櫎
- */
- public void delete(int position) {
- try {
- if (position != RecyclerView.NO_POSITION && list.size() > position) {
- list.remove(position);
- notifyItemRemoved(position);
- notifyItemRangeChanged(position, list.size());
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public AddPictureAdapter(Context context, List<LocalMedia> result) {
+ public AddPictureAdapter(Context context, List<LocalMedia> result, Map<String, UplodFileState> fileStates) {
this.mInflater = LayoutInflater.from(context);
this.list.addAll(result);
+ this.mContext = context;
+ this.fileStates = fileStates;
}
public void setSelectMax(int selectMax) {
@@ -77,19 +73,6 @@
}
}
- public static class ViewHolder extends RecyclerView.ViewHolder {
-
- ImageView mImg;
- ImageView mIvDel;
- TextView tvDuration;
-
- public ViewHolder(View view) {
- super(view);
- mImg = view.findViewById(R.id.fiv);
- mIvDel = view.findViewById(R.id.iv_del);
- tvDuration = view.findViewById(R.id.tv_duration);
- }
- }
@Override
public int getItemCount() {
@@ -132,16 +115,16 @@
//灏戜簬MaxSize寮狅紝鏄剧ず缁х画娣诲姞鐨勫浘鏍�
if (getItemViewType(position) == TYPE_CAMERA) {
viewHolder.mImg.setImageResource(R.mipmap.ic_add_image);
- viewHolder.mImg.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if (mItemClickListener != null) {
- mItemClickListener.openPicture();
- }
+ viewHolder.mImg.setOnClickListener(view -> {
+ if (mItemClickListener != null) {
+ mItemClickListener.openPicture();
}
});
viewHolder.mIvDel.setVisibility(View.INVISIBLE);
+ viewHolder.circleProgressView.setVisibility(View.GONE);
+ viewHolder.maskLayerBg.setVisibility(View.GONE);
} else {
+ //鍒犻櫎鍥剧墖
viewHolder.mIvDel.setVisibility(View.VISIBLE);
viewHolder.mIvDel.setOnClickListener(view -> {
int index = viewHolder.getAbsoluteAdapterPosition();
@@ -177,22 +160,85 @@
.centerCrop()
.placeholder(R.color.app_color_f6)
.diskCacheStrategy(DiskCacheStrategy.ALL)
+ .thumbnail(0.25f)
.into(viewHolder.mImg);
}
+
+ // 鏇存柊杩涘害
+ UplodFileState uplodFileState = TextUtils.isEmpty(media.getCompressPath())
+ ? fileStates.get(media.getRealPath())
+ : fileStates.get(media.getCompressPath());
+ if (uplodFileState != null) {
+ MyLog.d("progressRequestBodyHolder>>>" + "path:" + uplodFileState.getFilePath() + ">>>position:" + position);
+ uplodFileState.setAdapterPosition(position);
+ MyLog.d("progressRequestBodyHolder>>>" + "State:" + uplodFileState.getState() + ">>>position:" + position + ">>>Progress: " + uplodFileState.getProgress());
+
+ if (uplodFileState.getState() == UplodFileState.STATE_UPDING) {
+ MyLog.d("progressRequestBodyHolder>>>" + "姝e湪涓婁紶");
+ viewHolder.postError.setVisibility(View.GONE);
+ if (uplodFileState.getProgress() < 100) {
+ viewHolder.maskLayerBg.setVisibility(View.VISIBLE);
+ viewHolder.circleProgressView.setVisibility(View.VISIBLE);
+ viewHolder.circleProgressView.setProgress(uplodFileState.getProgress());
+ } else {
+ viewHolder.circleProgressView.setVisibility(View.GONE);
+ viewHolder.maskLayerBg.setVisibility(View.GONE);
+ }
+ } else if (uplodFileState.getState() == UplodFileState.STATE_DONE) {
+ MyLog.d("progressRequestBodyHolder>>>" + "瀹屾垚");
+ viewHolder.maskLayerBg.setVisibility(View.GONE);
+ viewHolder.circleProgressView.setVisibility(View.GONE);
+ } else {
+ MyLog.d("progressRequestBodyHolder>>>" + "閿欒");
+ viewHolder.maskLayerBg.setVisibility(View.VISIBLE);
+ viewHolder.postError.setVisibility(View.VISIBLE);
+ viewHolder.circleProgressView.setVisibility(View.GONE);
+ }
+ }
+
+
//itemView 鐨勭偣鍑讳簨浠�
if (mItemClickListener != null) {
viewHolder.itemView.setOnClickListener(v -> {
int adapterPosition = viewHolder.getAbsoluteAdapterPosition();
mItemClickListener.onItemClick(v, adapterPosition);
});
+ viewHolder.postError.setOnClickListener(v -> {
+ mItemClickListener.onReUpload(uplodFileState);
+ });
}
if (mItemLongClickListener != null) {
viewHolder.itemView.setOnLongClickListener(v -> {
- int adapterPosition = viewHolder.getAbsoluteAdapterPosition();
+ int adapterPosition = viewHolder.getBindingAdapterPosition();
mItemLongClickListener.onItemLongClick(viewHolder, adapterPosition, v);
return true;
});
+ }
+ }
+ }
+
+ /**
+ * 鏇存柊杩涘害
+ *
+ * @param uplodFileState
+ */
+ public void updateProgress(UplodFileState uplodFileState) {
+ MyLog.d("updateProgress>>>" + "State:" + uplodFileState.getState() + ">>>position:" + uplodFileState.getAdapterPosition() + ">>>Progress: " + uplodFileState.getProgress());
+
+ // 鏇存柊杩涘害鍙傛暟
+ if (fileStates.containsKey(uplodFileState.getFilePath())) {
+ // 鑾峰彇宸叉湁鐨� UplodFileState 瀵硅薄骞舵洿鏂拌繘搴�
+ UplodFileState existingState = fileStates.get(uplodFileState.getFilePath());
+ int position = existingState.getAdapterPosition();
+ existingState.setState(uplodFileState.getState());
+ if (uplodFileState.getState() == 0) {
+ existingState.setState(uplodFileState.getState());
+ existingState.setProgress(uplodFileState.getProgress()); // 鏇存柊杩涘害
+ // 鑾峰彇杩涘害鏇存柊椤圭殑浣嶇疆
+ }
+ if (position != RecyclerView.NO_POSITION) {
+ notifyItemChanged(position);
}
}
}
@@ -223,6 +269,11 @@
* @param position
*/
void onDeleteClick(int position);
+
+ /**
+ * 涓婁紶澶辫触鍚庨噸鏂颁笂浼�
+ */
+ void onReUpload(UplodFileState uplodFileState);
}
private OnItemLongClickListener mItemLongClickListener;
@@ -230,4 +281,42 @@
public void setItemLongClickListener(OnItemLongClickListener l) {
this.mItemLongClickListener = l;
}
+
+
+ /**
+ * 鍒犻櫎
+ */
+ public void delete(int position) {
+ try {
+ if (position != RecyclerView.NO_POSITION && list.size() > position) {
+ list.remove(position);
+ notifyItemRemoved(position);
+ notifyItemRangeChanged(position, list.size());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static class ViewHolder extends RecyclerView.ViewHolder {
+
+ ImageView mImg;
+ ImageView mIvDel;
+ ImageView postError;
+ TextView tvDuration;
+ RelativeLayout maskLayerBg;
+ CircleProgressView circleProgressView;
+
+
+ public ViewHolder(View view) {
+ super(view);
+ mImg = view.findViewById(R.id.fiv);
+ mIvDel = view.findViewById(R.id.iv_del);
+ tvDuration = view.findViewById(R.id.tv_duration);
+ circleProgressView = view.findViewById(R.id.cpv);
+ maskLayerBg = view.findViewById(R.id.mask_layer_bg);
+ postError = view.findViewById(R.id.postError);
+ }
+ }
+
}
\ No newline at end of file
--
Gitblit v1.8.0