Здесь я реализую,
- элементы пользовательского выбора
- добавление в адаптер
- текущая позиция адаптера непосредственно загружается в базу данных без прослушивания кликов
Для этого кода есть 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, поменяйте местами новый макет и запустите еще одну задачу загрузки. так как предотвратить эту еще одну загрузку и продолжить выполнение старой задачи загрузки?