离开后如何获得正确的 RecyclerView ViewHolder activity

How to get correct RecyclerView ViewHolder after leaving the activity

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

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

下载按钮后面的代码

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}

请问如何解决?

我不完全确定你所说的 "get the correct item View" 是什么意思。但是我从你的问题中了解到我认为你遇到的问题是因为你没有更新 UI.

让我解释一下,每当您离开并返回 activity 时,它正在为您下载 "recreate" RecyclerView。因此您无法访问之前显示的项目。

这里有两个选择:

  • 要么保存正在下载的内容的状态(使用 google :) 可以找到很多相关文章)
  • 或者您的代码中有一些 class 可以在您返回下载时以这种方式保留信息 activity 您只需要更新视图项目:)