im new to android developing. i have two list of musics that i can completely getting and playing and changing that's icon from play to pause or etc. but i have a major problem with my before playing item. for resolving this problem i was searching all of my past day and today and reading a lot codes to find best condition for changing.
Main Trouble: when im clicking for the first on play_btn , my music starting to play. its OK. when im clicking on play_btn playing music , it change icon to pause and its music will stop; truble when im clicking on next recycler row . my past btn_play icon dont changing.
viewHolder.btn_play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (oldPosition == -1) {
if (!isMediaPlayerPlaying) {
mediaPlayer = new MediaPlayer();
switch (listName) {
case "sabah": {
mediaPlayer = MediaPlayer.create(G.app, sabahMusics.get(position));
break;
}
case "masae": {
mediaPlayer = MediaPlayer.create(G.app, masaeMusics.get(position));
break;
}
}
Log.i("hdev", "boolean is: " + isMediaPlayerPlaying);
mediaPlayer.start();
isMediaPlayerPlaying = !isMediaPlayerPlaying;
oldPosition = position;
} else {
mediaPlayer.pause();
isMediaPlayerPlaying = !isMediaPlayerPlaying;
}
}
if (oldPosition != position) {
}
if (mediaPlayer.isPlaying()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
viewHolder.btn_play.setBackground(G.app.getDrawable(R.drawable.pause));
}
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
viewHolder.btn_play.setBackground(G.app.getDrawable(R.drawable.play));
}
}
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
Log.i("hdev", "Prepaired Prepaired Prepaired");
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
viewHolder.btn_play.setBackground(G.app.getDrawable(R.drawable.play));
}
}
});
}
});
im answerd this question with limitting my users:
viewHolder.btn_play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
takeView = view;
if (oldPosition == -1 || oldPosition == position) {
if (!isMediaPlayerPlaying) {
mediaPlayer = new MediaPlayer();
switch (listName) {
case "sabah": {
mediaPlayer = MediaPlayer.create(G.app, sabahMusics.get(position));
break;
}
case "masae": {
mediaPlayer = MediaPlayer.create(G.app, masaeMusics.get(position));
break;
}
}
Log.i("hdev", "boolean is: " + isMediaPlayerPlaying);
mediaPlayer.start();
isMediaPlayerPlaying = !isMediaPlayerPlaying;
oldPosition = position;
} else {
mediaPlayer.pause();
oldPosition = -1;
isMediaPlayerPlaying = !isMediaPlayerPlaying;
}
if (mediaPlayer.isPlaying()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
viewHolder.btn_play.setBackground(G.app.getDrawable(R.drawable.pause));
}
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
viewHolder.btn_play.setBackground(G.app.getDrawable(R.drawable.play));
}
}
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
Log.i("hdev", "Prepaired Prepaired Prepaired");
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
viewHolder.btn_play.setBackground(G.app.getDrawable(R.drawable.play));
}
}
});
} else {
MediaPlayer waterMediaPlayer = new MediaPlayer();
waterMediaPlayer = new MediaPlayer();
waterMediaPlayer = MediaPlayer.create(G.app, R.raw.water);
waterMediaPlayer.start();
animateShake(viewHolder.btn_play);
Snackbar.make(view.getRootView() ,"Something to show Err for user", 2000).show();
}
}
});