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