Как сохранить задачу загрузки в адаптер, когда notifyItemRemoved или notifyDatasetChabged? - PullRequest
0 голосов
/ 27 апреля 2020

Здесь я реализую,

  • элементы пользовательского выбора
  • добавление в адаптер
  • текущая позиция адаптера непосредственно загружается в базу данных без прослушивания кликов

Для этого кода есть In In Activity.

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && data != null)
        {
            switch (requestCode)
            {
                case PICK_IMAGE:
                    ImageUri = data.getData();
                    Log.i("wneuiewnewu",ImageUri.getPath());
                    UriListFromGallery.add(ImageUri);
                    postImageAdapter.notifyItemInserted(UriListFromGallery.size()-1);
                    break;
            }
        }
    }

В классе адаптера @ Override

 public void onBindViewHolder(@NonNull final ImageViewHolder imageViewHolder, final int i) {
 final StorageReference filepath=PostReference.child("image").child(currentUserID).child(currentUserID +String.valueOf(tsLong)+FORMAT_IMAGE);
        final UploadTask task=filepath.putFile(imagelist.get(i));

task.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
                iImageViewHolder.progressBar.setProgress((int) progress);
imageViewHolder.deleteImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                task.cancel();
                imagelist.remove(i);
                notifyitemremoved(i);
            }
        });
            }
        });
}

работа работает хорошо, Пусть проблема объяснена на примере, Предположим, imagelist имеет 5 item.

  • 0 1 2 3 4 и если 3-й элемент (index 2) удален..notifyitemremoved (2) вызывается, то старый элемент (index 3 & index 4) теперь становится (индекс 2 и индекс 3). Изменяя этот индекс onBindViewHolder, поменяйте местами новый макет и запустите еще одну задачу загрузки. так как предотвратить эту еще одну загрузку и продолжить выполнение старой задачи загрузки?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...