我有一个recyclerview,我使用firebaserecycleradapter在其上填充数据。列表中的每个项目都包含对firebase存储的引用。所以当我点击下载按钮(红色按钮)时,下载开始,我可以获得有关视图的信息。当下载正在进行中并且我离开活动并返回下载仍在进行中但从未返回正确的项目视图。
如何在我回来时获取正确的项目视图,以便我可以显示特定项目的下载进度,并在下载完成后对该特定项目进行一些更改。
代码隐藏下载按钮
storageReference.getFile(zipFile)
.addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
Log.d("visibilitedocSuccess", ""+holder+"|"+key+"|holder"+holder+"|holderid:"+holder.getAdapterPosition()+"|oldpos:"+holder.getOldPosition());
holder.txtProgress.setVisibility(View.GONE);
holder.progressBar.setVisibility(View.GONE);
holder.imgDocumentChecker.setVisibility(View.VISIBLE);
holder.imgDocumentChecker.setImageResource(R.drawable.done_ic);
}
})
.addOnProgressListener(new OnProgressListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onProgress(FileDownloadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
Log.d("visibilitedocProgress:", progress + "% done"+"|holder"+holder+"|holderid:"+holder.getAdapterPosition()+"|oldpos:"+holder.getOldPosition());
holder.txtProgress.setText(((int) progress) + "%");
holder.progressBar.setProgress((int) progress);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("visibilitedocFail:", e + "");
holder.txtProgress.setVisibility(View.GONE);
holder.progressBar.setVisibility(View.GONE);
holder.imgDocumentChecker.setVisibility(View.VISIBLE);
holder.imgDocumentChecker.setImageResource(R.drawable.download_icon);
Toasty.error(DocumentsListActivity.this, "Chargement annulé", Toast.LENGTH_LONG, true).show();
}
});
Logcat显示以下与ViewHolder相关的信息
ViewHolder{ace0130 position=-1 id=-1, oldPos=-1, pLpos:-1 unbound no parent}
如何解决它?
答案 0 :(得分:0)
我不完全确定你的意思是“获得正确的项目查看”。但是,我从您的问题中了解到,我认为您遇到的问题来自于您不更新UI的事实。
让我解释一下,每当你走出并回到正在下载的活动时,你都会“重新创建”RecyclerView。因此,您无法访问显示的先前项目。
这里有两个选择: