Android recyclerview中的进度条重叠

Android recyclerview中的进度条重叠,android,android-recyclerview,Android,Android Recyclerview,在我的android项目中,我使用的是RecyclerView。在运行时,我需要向它添加文件,以便它将这些文件上载到我的服务器。每个项目上都会有一个进度条来显示上传进度。我的问题是,每当我想一次上载更多文件时,一个项目的进度就会显示在另一个项目上。这只发生在当前正在运行的上载上,因为我隐藏了已完成的ProgressBar。每当我上下滚动时,它也会发生。我曾尝试将上传进度存储在hashMap中,并在项目出现时检索它,但没有成功。我知道这是RecyclerView与listview相比的自然行为。我

在我的android项目中,我使用的是RecyclerView。在运行时,我需要向它添加文件,以便它将这些文件上载到我的服务器。每个项目上都会有一个进度条来显示上传进度。我的问题是,每当我想一次上载更多文件时,一个项目的进度就会显示在另一个项目上。这只发生在当前正在运行的上载上,因为我隐藏了已完成的ProgressBar。每当我上下滚动时,它也会发生。我曾尝试将上传进度存储在hashMap中,并在项目出现时检索它,但没有成功。我知道这是RecyclerView与listview相比的自然行为。我想知道如何才能做到这一点。我用s3上传文件。如果文件是图像,则滑动以显示文件的缩略图

代码:

@覆盖
public void onBindChildViewHolder(最终MyChildViewHolder持有者、最终int-groupPosition、最终int-childPosition、int-viewType){
最终MyChildItem子项=Items.get(groupPosition).children.get(childPosition);
Context ctx=holder.imageView.getContext();
最终字符串状态=Smap.get(child.fileInfo.unique\u id);
日志d(“状态”,状态);
开关(状态){
case常量。未知:
case Constants.u正在等待:
case常量已暂停:
案例常量。失败:
case.cancelled:
holder.upload\u cancel.setVisibility(视图可见);
holder.resume\u pause\u select.setVisibility(View.VISIBLE);
holder.resume\u pause\u select.setImageResource(R.drawable.ic\u action\u ic\u refresh\u white\u 24dp);
holder.fileprogressbar.setVisibility(视图.不可见);
holder.file_name.setVisibility(View.INVISIBLE);
打破
案例常量。挂起\u取消:
案例常量。挂起\网络\断开连接:
case Constants.PART_已完成:
case Constants.PENDING_暂停:
case Constants.WAITING_FOR_网络:
案例常数。正在进行中:
case.WAITING:
holder.upload\u cancel.setVisibility(视图可见);
holder.fileprogressbar.SetUndeterminate(true);
holder.resume\u pause\u select.setVisibility(View.VISIBLE);
holder.resume\u pause\u select.setImageResource(R.drawable.ic\u action\u ic\u pause\u white\u 24dp);
holder.fileprogressbar.setVisibility(View.VISIBLE);
holder.file_name.setVisibility(View.INVISIBLE);
试一试{
file file=new file(null,child.fileInfo.unique\u id,child.fileInfo.localpath,child.fileInfo.remotepath,status,child.fileInfo.privacy,child.fileInfo.file\u size,“UPLOAD”,Umap.get(child.fileInfo.unique\u id),child.fileInfo.pond\u id,Constants.getLastTimeOpen());
插入(文件);
Log.d(“新文件”、“插入”);
}捕获(SQLE异常){
日志d(“错误”,“未插入”);
}
整数prevprogress=Pmap.get(child.fileInfo.unique\u id);
if(prevprogress!=null){
holder.fileprogressbar.SetUndeterminate(false);
holder.fileprogressbar.setProgress(prevprogress);
}
transferObserver=Util.getTransferUtility(getContext()).getTransferById(Integer.parseInt(Umap.get(child.fileInfo.unique_id));
if(transferObserver!=null){
setTransferListener(新的TransferListener(){
@凌驾
公共无效状态已更改(int i,TransferState TransferState){
if(child.fileInfo.unique_id!=null&&!child.fileInfo.unique_id.isEmpty()){
Umap.put(child.fileInfo.unique_id,String.valueOf(i));
Smap.put(child.fileInfo.unique_id,transferState.toString());
}
holder.fileprogressbar.SetUndeterminate(true);
if(transferState.toString().equals(Constants.COMPLETED)){
com.ficean.android.ficean.File.File.fileStore(getContext(),phonenumber,“UPLOAD”,child.fileInfo,new com.ficean.android.ficean.File.File.Call()){
@凌驾
成功时的公共void(布尔结果){
如果(结果){
}
}
});
}
List files=fileDao.queryBuilder().where(com.ficean.android.ficean.db.fileDao.Properties.File_unique_id.eq(child.fileInfo.unique_id)).limit(1.build().List();
用于(文件:文件){
file.setFile_status(transferState.toString());
file.setU_id(String.valueOf(i));
更新(文件);
}
expMgr.notifyChildItemChanged(groupPosition,childPosition);
}
@凌驾
已更改的公共void onProgressChanged(整数i、长l、长l1){
int值=常数。百分比(l,l1);
holder.fileprogressbar.SetUndeterminate(false);
holder.fileprogressbar.setProgress(值);
Pmap.put(child.fileInfo.unique\u id,值);
}
@凌驾
公共无效申报人(内部i,例外e){
}
});
}
打破
违约:
斯特里
  @Override
    public void onBindChildViewHolder(final MyChildViewHolder holder, final int groupPosition, final int childPosition, int viewType) {
        final MyChildItem child = Items.get(groupPosition).children.get(childPosition);
        Context ctx = holder.imageView.getContext();

        final String status = Smap.get(child.fileInfo.unique_id);
        Log.d("STATUS", status);
        switch (status) {
            case Constants.UNKNOWN:
            case Constants.RESUMED_WAITING:
            case Constants.PAUSED:
            case Constants.FAILED:
            case Constants.CANCELED:
                holder.upload_cancel.setVisibility(View.VISIBLE);
                holder.resume_pause_select.setVisibility(View.VISIBLE);
                holder.resume_pause_select.setImageResource(R.drawable.ic_action_ic_refresh_white_24dp);
                holder.fileprogressbar.setVisibility(View.INVISIBLE);
                holder.file_name.setVisibility(View.INVISIBLE);
                break;
            case Constants.PENDING_CANCEL:
            case Constants.PENDING_NETWORK_DISCONNECT:
            case Constants.PART_COMPLETED:
            case Constants.PENDING_PAUSE:
            case Constants.WAITING_FOR_NETWORK:
            case Constants.IN_PROGRESS:
            case Constants.WAITING:
                holder.upload_cancel.setVisibility(View.VISIBLE);
                holder.fileprogressbar.setIndeterminate(true);
                holder.resume_pause_select.setVisibility(View.VISIBLE);
                holder.resume_pause_select.setImageResource(R.drawable.ic_action_ic_pause_white_24dp);
                holder.fileprogressbar.setVisibility(View.VISIBLE);
                holder.file_name.setVisibility(View.INVISIBLE);
                try {
                    file file = new file(null, child.fileInfo.unique_id, child.fileInfo.localpath, child.fileInfo.remotepath, status, child.fileInfo.privacy, child.fileInfo.file_size, "UPLOAD", Umap.get(child.fileInfo.unique_id), child.fileInfo.pond_id, Constants.getLastTimeOpened());
                    fileDao.insert(file);
                    Log.d("new file", "Inserted");
                } catch (SQLException e) {
                    Log.d("ERROR", "Not Inserted");
                }
                Integer prevprogress = Pmap.get(child.fileInfo.unique_id);
                if(prevprogress!=null){
                    holder.fileprogressbar.setIndeterminate(false);
                    holder.fileprogressbar.setProgress(prevprogress);
                }
                transferObserver = Util.getTransferUtility(getContext()).getTransferById(Integer.parseInt(Umap.get(child.fileInfo.unique_id)));
                if (transferObserver != null) {
                    transferObserver.setTransferListener(new TransferListener() {
                        @Override
                        public void onStateChanged(int i, TransferState transferState) {
                            if (child.fileInfo.unique_id != null && !child.fileInfo.unique_id.isEmpty()) {
                                Umap.put(child.fileInfo.unique_id, String.valueOf(i));
                                Smap.put(child.fileInfo.unique_id, transferState.toString());
                            }
                            holder.fileprogressbar.setIndeterminate(true);

                            if (transferState.toString().equals(Constants.COMPLETED)) {
                                com.ficean.android.ficean.File.File.fileStore(getContext(), phonenumber, "UPLOAD", child.fileInfo, new com.ficean.android.ficean.File.File.Call() {
                                    @Override
                                    public void onSuccess(boolean result) {
                                        if (result) {
                                        }
                                    }
                                });
                            }
                            List<file> files = fileDao.queryBuilder().where(com.ficean.android.ficean.db.fileDao.Properties.File_unique_id.eq(child.fileInfo.unique_id)).limit(1).build().list();
                            for (file file : files) {
                                file.setFile_status(transferState.toString());
                                file.setU_id(String.valueOf(i));
                                fileDao.update(file);
                            }
                            expMgr.notifyChildItemChanged(groupPosition,childPosition);
                        }

                        @Override
                        public void onProgressChanged(int i, long l, long l1) {
                            int value = Constants.percentage(l, l1);
                            holder.fileprogressbar.setIndeterminate(false);
                            holder.fileprogressbar.setProgress(value);
                            Pmap.put(child.fileInfo.unique_id,value);
                        }

                        @Override
                        public void onError(int i, Exception e) {

                        }
                    });
                }
                break;
            default:
                String link = SaveUtil.getEncryptedPreferences(getContext()).getString(child.fileInfo.unique_id, Constants.NOTHING);
                Glide.with(getContext()).load(link).skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.SOURCE).crossFade().placeholder(R.drawable.image_icon).listener(new CustomRequestListener(new CustomRequestListener.requestCallBack() {
                    @Override
                    public void onSuccess(boolean isSuccess) {
                        if (!isSuccess) {
                            String remotePath;
                            if (Opener.isFileVideo(child.fileInfo.localpath)) {
                                remotePath = phonenumber.concat("/").concat("thumbnails").concat("/").concat(FilenameUtils.removeExtension(new File(child.fileInfo.localpath).getName())).concat(".png");
                            } else {
                                remotePath = child.fileInfo.remotepath;
                            }
                            LoginCredentials.getSignedUrl(getContext(), remotePath, new LoginCredentials.UrlCallback() {
                                @Override
                                public void onSuccess(final URL url) {
                                    if (url != null) {
                                        Glide.with(getContext()).load(url.toString()).skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.SOURCE).crossFade().placeholder(R.drawable.image_icon).listener(new CustomRequestListener(new CustomRequestListener.requestCallBack() {
                                            @Override
                                            public void onSuccess(boolean isSuccess) {
                                                if (isSuccess) {
                                                    SaveUtil.getEncryptedEditor(getContext()).putString(child.fileInfo.unique_id, url.toString()).apply();
                                                }
                                            }
                                        })).error(R.drawable.image_icon).into(holder.imageView);
                                    }
                                }
                            });
                        }
                    }
                })).error(R.drawable.image_icon).into(holder.imageView);
                holder.resume_pause_select.setVisibility(View.INVISIBLE);
                holder.fileprogressbar.setVisibility(View.INVISIBLE);
                holder.upload_cancel.setVisibility(View.INVISIBLE);
                break;
        }
    }