Позиция элемента не обновляется в методе onBind

#android #android-recyclerview #android-adapter

#Android #android-recyclerview #android-адаптер

Вопрос:

Я реализую интерфейс для определения того, когда вид щелкает в режиме рециркуляции. Я удаляю элемент при нажатии кнопки. Он отлично работает при нажатии кнопки onBind. Но когда я нажимаю второй раз, он удаляет представление, присутствующее рядом с ним.

 @Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

    holder.delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            optionsClickEvent.onDeleteClicked(position, imagePath);
            showToast(String.valueOf(position));
        }
    });

}
  

Приведенный выше код выполняется в onBind. Затем я удаляю:

 @Override
public void onDeleteClicked(int position, ArrayList<String> filePath) {
    filePath.remove(position);
    imageAdapter.notifyItemRemoved(position);
}
  

Это работает один раз идеально. Но элементы не обновляются. И когда я нажимаю кнопку удаления во второй раз, элемент удаляется в позиции 1.

Комментарии:

1. позиция — это позиция макета или позиция адаптера? попробуйте использовать позицию адаптера

2. Я не знаю. Смотрите код выше. Я изменил его.

Ответ №1:

Пользователь holder.getAdapterPosition() вместо позиции макета в onClick

 @Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

holder.delete.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        optionsClickEvent.onDeleteClicked(holder.getAdapterPosition(), imagePath);
        showToast(String.valueOf(position));
    }
});

}
  

Комментарии:

1. Спасибо. Почему holder.getAdapterPosition() выдает -1 при использовании в методе showToast()?