离开活动

时间:2018-04-19 13:34:30

标签: android android-recyclerview download firebaseui android-viewholder

我有一个recyclerview,我使用firebaserecycleradapter在其上填充数据。列表中的每个项目都包含对firebase存储的引用。所以当我点击下载按钮(红色按钮)时,下载开始,我可以获得有关视图的信息。当下载正在进行中并且我离开活动并返回下载仍在进行中但从未返回正确的项目视图。

如何在我回来时获取正确的项目视图,以便我可以显示特定项目的下载进度,并在下载完成后对该特定项目进行一些更改。

Recyclerview items and download button in red

代码隐藏下载按钮

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}

如何解决它?

1 个答案:

答案 0 :(得分:0)

我不完全确定你的意思是“获得正确的项目查看”。但是,我从您的问题中了解到,我认为您遇到的问题来自于您不更新UI的事实。

让我解释一下,每当你走出并回到正在下载的活动时,你都会“重新创建”RecyclerView。因此,您无法访问显示的先前项目。

这里有两个选择:

  • 要么保存你正在下载的东西的状态(你可以使用谷歌找到很多文章:))
  • 或者您的代码中有一些类,当您返回下载活动时,您只需更新查看项目即可保存信息:)