Я не совсем понимаю, что вы пытаетесь сделать.
Код содержит несколько ошибок, которые я попытаюсь объяснить.
Явная ошибка, которую вы сделали, остается в onBindViewholder, где вы вызываете слушателя при создании каждого элемента, а не после нажатия на него.
Вы просто добавляете onClickListener в viewHolder.getItemView () или в конкретном представлении держателя, а затем выполняете операцию, которую вам нужно выполнить после щелчка по элементу.
Если вы установите слушателя внутри onBindViewHolder, у вас также есть метод с именем
holder.getAdapterPosition (), который вы можете использовать, чтобы понять, на какой элемент вы нажимаете.
Держатель вида должен использоваться только для настройки представлений в соответствии с данными, которые вы связываете, и ничего больше. По этой причине вам не следует передавать какой-либо объект или прослушиватель, а использовать подход, описанный выше.
Если вам нужно только извлечь выбранные песни после того, как пользователь подтвердит свой список воспроизведения, вы можете просто добавить публичный метод на свой адаптер
public List<ProgramsData> getSelectedSongs()
, что вы можете вызвать из своего фрагмента, когда пользователь нажмет кнопку подтверждения.
Чтобы иметь список всех выбранных песен, вы можете иметь другой список
ArrayList<ProgramsData> selectedPrograms;
что вы собираетесь заполнить после клика.
Содержимое слушателя внутри onBindViewHolder может быть
ProgramsData currentProgram = programs.get(holder.getAdapterPosition());
if(selectedPrograms.contains(currentProgram){
selectedPrograms.remove(currentProgram);
}else{
selectedPrograms.add(currentProgram);
}
notifyItemChanged(holder.getAdapterPosition); //You can use this to update the view of the selected item
Затем внутри метода onBindViewHolderMethod вы можете проверить, являются ли элементы, которые вы связываете, частью selectedList и соответствующим образом обновить представления.