我们正在开发一个应用,其中可以播放阵列列表中的3首歌曲。在第一首歌曲之后,应在再次按下播放后播放下一首歌曲(此方法有效)。但是在第二首歌曲结束后,我们希望出现“开始游戏”按钮。我们以OnCompletion方法实现了此功能,该方法适用于第一首歌曲,但不适用于第二首歌曲。 这是代码的一部分:
@Override public void onCompletion(MediaPlayer mediaPlayer) {
//adding the start game button after song finishes for the first time
// Button start_button = findViewById(R.id.startGame);
// start_button.setVisibility(View.VISIBLE);
Button start_button = findViewById(R.id.startGame);
start_button.setText(getString(R.string.START));
start_button.setVisibility(View.VISIBLE);
//changing the play button to replay after song finishes
ImageButton imgButton = findViewById(R.id.imageButton);
imgButton.setImageResource(R.drawable.replay);
}
});
public void NextSong(View view) {
// Logic following
if (songs.size() == 3) {
songs.get(0).stop();
songs.get(0).release();
mediaPlayer.release();
mediaPlayer=null;
//songs.get(0).reset();
songs.remove(0);
Button NextSong = findViewById(R.id.NextSong);
NextSong.setVisibility(View.INVISIBLE);
final TextView result_display = findViewById(R.id.result_view);
result_display.setVisibility(View.INVISIBLE);
} else if (songs.size() == 2) {
songs.get(0).release();
songs.remove(0);
Button NextSong = findViewById(R.id.NextSong);
NextSong.setVisibility(View.INVISIBLE);
final TextView result_display = findViewById(R.id.result_view);
result_display.setVisibility(View.INVISIBLE);
} else {
songs.get(0).release();
songs.remove(0);
// CONGRATS
final TextView result_display = findViewById(R.id.result_view);
result_display.setVisibility(View.VISIBLE);
result_display.setText(getString(R.string.Congrats));
}
您能否帮助我们第二次达到OnCompletion。
答案 0 :(得分:0)
我认为您在songs.size
上遇到了问题,看起来您在arraylist中有3个Mediaplayer并进行了if else condtion
检查
songs.size == 2
songs.size == 3
这是不正确的,您应该检查
songs.size() - 1
将获得第二首歌曲或媒体播放器
songs.size() - 2
这将获得第三首歌曲/媒体播放器
因为arraylist从0开始索引。
,您将在每种情况下仅删除第0个索引元素songs.remove(0);
。我不确定为什么,因为根据您的逻辑,它应该删除已经完成的歌曲,例如
songs.remove(songs.size() - 1)
songs.remove(songs.size() - 2)
可能也是一个问题。我不了解全部逻辑,因此无法发表评论。