#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()?