无法第二次到达完成监听器,Android Studio

时间:2019-02-25 11:49:15

标签: android android-mediaplayer

我们正在开发一个应用,其中可以播放阵列列表中的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。

1 个答案:

答案 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)

可能也是一个问题。我不了解全部逻辑,因此无法发表评论。