我是android开发的新手。我有两个音乐列表,我可以完全获取和播放,并将其图标从播放更改为暂停等。但是我在玩项目之前遇到了一个大问题。为了解决这个问题,我一直在搜寻过去和现在的一整天,并阅读了大量代码以找到最佳的更改条件。
主要故障:当我单击play_btn上的第一个时,我的音乐开始播放。没关系。当我单击play_btn播放音乐时,它将图标更改为暂停,其音乐将停止;当我点击下一个回收站行时出现问题。我过去的btn_play图标不会更改。
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));
}
}
});
}
});
我通过限制我的用户回答了这个问题:
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();
}
}
});