- Воспроизвести любой элемент из recyclerview — он воспроизводится.
- Остановить тот же элемент — он останавливается, но при остановке возникает некоторая проблема с состоянием mediaPlayer, для этого прикрепляются журналы.
При нажатии на тот же элемент для воспроизведения - он не воспроизводится, для этого также прикрепляются журналы ошибок.< /li>
Код: Выделить всё
holder.musicPlay.setOnClickListener(v -> {
if (currentPlayingPosition == holder.getAdapterPosition()) {
// Toggle playback for the currently playing item
handleTogglePlayback(holder);
} else {
// Stop and release the previous MediaPlayer if it's not null
releaseMediaPlayer();
// Initialize a new MediaPlayer for the selected item
initializeMediaPlayer(holder, itemModel);
}
});
private void handleTogglePlayback(ViewHolder holder) {
if (mediaPlayer != null) {
try {
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
holder.musicPlay.setImageResource(R.drawable.playbutton);
if (onMusicEventListener != null) {
onMusicEventListener.onMusicStop();
}
} else {
mediaPlayer.start();
holder.musicPlay.setImageResource(R.drawable.pause);
if (onMusicEventListener != null) {
onMusicEventListener.onMusicStart(list.get(holder.getAdapterPosition()).getMusicName(), mediaPlayer);
}
}
} catch (IllegalStateException e) {
Log.e("CategoryItemAdapter", "IllegalStateException: " + e.getMessage());
releaseMediaPlayer();
}
}
}
private void releaseMediaPlayer() {
if (mediaPlayer != null) {
try {
mediaPlayer.stop();
} catch (IllegalStateException e) {
Log.e("CategoryItemAdapter", "Error stopping MediaPlayer: " + e.getMessage());
} finally {
mediaPlayer.release();
mediaPlayer = null;
}
}
}
private void initializeMediaPlayer(ViewHolder holder, CategoryItemModel itemModel) {
try {
mediaPlayer = MediaPlayer.create(context, itemModel.getMusicSource());
if (mediaPlayer != null) {
mediaPlayer.setOnCompletionListener(mp -> {
holder.musicPlay.setImageResource(R.drawable.playbutton);
if (onMusicEventListener != null) {
onMusicEventListener.onMusicStop();
}
currentPlayingPosition = -1;
});
mediaPlayer.setOnErrorListener((mp, what, extra) -> {
Log.e("CategoryItemAdapter", "MediaPlayer error: " + what + ", " + extra);
return true;
});
mediaPlayer.start();
holder.musicPlay.setImageResource(R.drawable.pause);
if (onMusicEventListener != null) {
onMusicEventListener.onMusicStart(itemModel.getMusicName(), mediaPlayer);
}
if (currentPlayingViewHolder != null) {
currentPlayingViewHolder.musicPlay.setImageResource(R.drawable.playbutton);
}
currentPlayingViewHolder = holder;
currentPlayingPosition = holder.getAdapterPosition();
}
} catch (Exception e) {
Log.e("CategoryItemAdapter", "Error initializing MediaPlayer: " + e.getMessage());
releaseMediaPlayer();
}
}
Код: Выделить всё
MediaPlayer W mediaplayer went away with unhandled events
chatty I uid=10310(com.app.sleepy) identical 1 line
MediaPlayer W mediaplayer went away with unhandled events
Код: Выделить всё
CategoryItemAdapter E IllegalStateException: null
CategoryItemAdapter E Error stopping MediaPlayer: null
MediaPlayer V resetDrmState: mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
MediaPlayer V cleanDrmObj: mDrmObj=null mDrmSessionId=null
Код: Выделить всё
mediaPlayer.reset()
Код: Выделить всё
mediaPlayer.release()
Подробнее здесь: https://stackoverflow.com/questions/788 ... cyclerview
Мобильная версия