From 596d0bcbacd8dde70f0bbcfdf07db5cf694220ef Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期三, 08 一月 2025 09:33:20 +0800 Subject: [PATCH] 1.修复上传文件取消上传还会上传bug 2.添加上传视频功能 3.添加关闭activity时关闭上传功能。 --- app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java | 172 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 134 insertions(+), 38 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 b5bd809..7302fde 100644 --- a/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java +++ b/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java @@ -2,19 +2,24 @@ 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; import androidx.recyclerview.widget.RecyclerView; 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.luck.picture.lib.adapter.holder.PreviewGalleryAdapter; +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,27 +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) { @@ -78,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() { @@ -113,6 +95,7 @@ /** * 鍒涘缓ViewHolder */ + @NonNull @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = mInflater.inflate(R.layout.item_add_filter_image, viewGroup, false); @@ -128,24 +111,25 @@ * 璁剧疆鍊� */ @Override - public void onBindViewHolder(final ViewHolder viewHolder, final int position) { + public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int position) { //灏戜簬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(); if (index != RecyclerView.NO_POSITION && list.size() > index) { + mItemClickListener.onDeleteClick(index); list.remove(index); notifyItemRemoved(index); notifyItemRangeChanged(index, list.size()); @@ -178,20 +162,82 @@ .diskCacheStrategy(DiskCacheStrategy.ALL) .into(viewHolder.mImg); } + + // 鏇存柊杩涘害 + UplodFileState uplodFileState = TextUtils.isEmpty(media.getCompressPath()) + ? fileStates.get(media.getRealPath()) + : fileStates.get(media.getCompressPath()); + if (uplodFileState != null) { + 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); } } } @@ -215,6 +261,18 @@ * Open PictureSelector */ void openPicture(); + + /** + * 鍒犻櫎浜嗘煇涓�涓� + * + * @param position + */ + void onDeleteClick(int position); + + /** + * 涓婁紶澶辫触鍚庨噸鏂颁笂浼� + */ + void onReUpload(UplodFileState uplodFileState); } private OnItemLongClickListener mItemLongClickListener; @@ -222,4 +280,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