У меня есть recyclerview с медиаплеером для воспроизведения песни в каждой строке. У меня есть только одна кнопка для воспроизведения/остановки, которая меняет символ.
Вот моя проблема:
Пример 1 (отлично работает):
(Для положения адаптера 1) пользователь нажимает символ воспроизведения, и музыка воспроизводится для этого положения адаптера, и символ меняется на символ остановки, затем он нажимает символ остановки, и музыка останавливается, а символ снова меняется на символ воспроизведения, готовый к запуску. снова музыка.
Пример 2 (это проблема)
(Для положения адаптера 1) пользователь нажимает символ воспроизведения, и для этого положения адаптера воспроизводится музыка, а символ меняется на символ остановки. Не нажимая эту кнопку снова, они затем нажимают символ воспроизведения (положение адаптера 3), поэтому теперь они пытаются воспроизвести песню на позициях 1 и 3 одновременно. Я исправил одновременное воспроизведение обеих песен, так что при нажатии второй песни воспроизводимый носитель сбрасывается, а исходный файл песни заменяется новой песней (за раз будет воспроизводиться только одна).
Затем проблема возникает, даже если медиаплеер ведет себя должным образом. Медиаплеер управляется в mainactivity. Изображение кнопки воспроизведения/остановки (imageview) изменяется в окне просмотра адаптера, и я не могу найти способ изменить символ воспроизведения/остановки при одновременном нажатии более одной песни.
На этом изображении показан пример, когда были нажаты и песня 1, и песня 3. Теперь воспроизводится только песня 3, но изображения по-прежнему отображаются так, как будто обе песни воспроизводятся одновременно.
Это мой держатель представления, где я обрабатываю изменение изображения воспроизведения/остановки и отправляю обратный вызов песни:
class AddVideoAudioViewHolder extends RecyclerView.ViewHolder{
ImageView PlayButton;
Button AddAudioButton;
TextView Title;
public AddVideoAudioViewHolder(View itemView) {
super(itemView);
PlayButton = (ImageView) itemView.findViewById(R.id.PlayStopAudioDemo);
PlayButton.setTag(1);
PlayButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int PlayStopButtonState = (int) PlayButton.getTag();
if (PlayStopButtonState == 1) {
mVideoAudioCallbacks.onClick(100 + getAdapterPosition());
PlayButton.setImageResource(R.drawable.playstop);
PlayButton.setTag(2);
} else {
mVideoAudioCallbacks.onClick(200 + getAdapterPosition());
PlayButton.setImageResource(R.drawable.playarrow);
PlayButton.setTag(1);
}
}
});
и это метод в основном действии, когда я обрабатываю случай воспроизведения двух песен:
public void PlaySong (int SongNumber, int ObjectInt){
if (mp == null) {
mp = new MediaPlayer();
}else{
mp.reset();
}
try {
mp.setDataSource(this, Uri.parse("android.resource://com.example.nick.accountable/" + SongArray[SongNumber]));
} catch (IOException e) {
e.printStackTrace();
}
try {
mp.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mp.start();
}
Итак, мой вопрос, могу ли я добавить некоторый код в держатель представления или в основное действие, который может изменить все другие представления, кроме текущей позиции адаптера. т.е. Если щелкнуть песню номер 3 для воспроизведения, установите изображение для позиций 1-2 и 4-10 как невоспроизводимое или есть лучший способ сделать это.
Спасибо за помощь Николай