如何更改My OnClickListener以停止currentSound并启动新的One OnClick

时间:2016-10-02 13:48:16

标签: java android android-mediaplayer

您好我现在正在Udacity做免费课程来构建翻译应用程序。 还有一个任务,就是让ArrayList的ListItem发挥声音onClick。他们说你可以单独或与教程一起完成。所以我自己做了,并跳过了教程,展示了如何做到这一点。 现在我用我的工作代码回到了教程。 而且他们给了我们另一个任务。使用OnStop方法和MediaPlayer停止播放后释放资源。 但是我没有按照他们在教程中所做的那样完成上一个任务。现在我很难完成新任务。

我已经制作了一个自己的适配器“WordAdapter”,我有4个活动。

在WordAdapter中我制作了2个全局值:

私人MediaPlayer播放; private int isPlaying;

在@OverrideMethod中 我将isPlaying的值设置为0;

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

RewriteEngine On
# in case someone accesses with capitals
RewriteRule ^CV/(.*)$ http://www.myname.com/cv/ [R=301,L]
# pretty URL's for the language
RewriteRule ^cv/(en|it|)/(.*)$ cv/index.php?lang=$1 [L,QSA]

我创建了一个OnClicklistener

isPlaying = 0;

我创建了一个ImageButton宽度和一个OnClickListener

private MediaPlayer.OnCompletionListener mOnCompletion = new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        isPlaying = 0;
        releaseMediaPlayer();
    }
};

比我发布了一个releaseMediaPlayerMethod:

    ImageButton playIcon = (ImageButton) listItemView.findViewById(R.id.playIcon);
        int colorOfThePlayIcon = ContextCompat.getColor(getContext(), mColorResourceId);
        playIcon.setBackgroundColor(colorOfThePlayIcon);
        playIcon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                play = MediaPlayer.create(getContext(), currentWord.getPlaySound());

                if (isPlaying == 1) {
                    play.stop();
                    play.reset();
                    play.create(getContext(), currentWord.getPlaySound());
                    play.start();
                    isPlaying = 1;

                }

                if (isPlaying == 0) {
                    play.start();
                    isPlaying = 1;
                }
                play.setOnCompletionListener(mOnCompletion);
            }
        });

比我制作OnStop方法的活动:

public void releaseMediaPlayer() {
    if (play != null){
        play.release();
        play = null;
    }
}

因此,在完成播放后,此代码应释放MediaPlayer的资源。 当用户离开应用程序后停止活动时,资源也应该被释放。 当MediaPlayer播放声音时,当我点击playIcon时,它应该停止当前声音并开始播放新选中的声音。 如果我在MediaPlayer播放声音时离开应用程序,它应首先停止声音,然后释放资源。

但是,如果我点击playIcon,应用程序不会停止当前声音并启动新声音。它只播放两种声音。如果我点击三次就会发出三声。

如果我离开应用程序,它也不会停止当前的声音。

那么我需要更改它是否会停止当前的声音onClick?

1 个答案:

答案 0 :(得分:0)

我更改了onClick方法和releaseMediaPlayer方法中的代码。现在播放声音停止,如果我在播放图标上单击两次,则会开始新声音。

public void releaseMediaPlayer() {
    // If the media player is not null, then it may be currently playing a sound.
    if (play != null) {
        // Regardless of the current state of the media player, release its resources
        // because we no longer need it.
        play.release();
        // Set the media player back to null. For our code, we've decided that
        // setting the media player to null is an easy way to tell that the media player
        // is not configured to play an audio file at the moment.
        play = null;
        Log.e("WordAdapter.this", "onStop");
    }
}

playIcon.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            releaseMediaPlayer();
            play = MediaPlayer.create(getContext(), currentWord.getPlaySound());
            play.start();
            play.setOnCompletionListener(mOnCompletion);
        }
    });

现在唯一的问题是,如果我按下主页按钮,它就不会调用'releaseMediaPlayer(...)'方法。实际的声音并没有停止播放。

在WordAdapter中我有这段代码。我可以在Activity中调用releaseMediaPlayer方法。

public WordAdapter(Context context) {
    super(context, 0, 0);
}
编辑:我得到了真正的问题,现在releaseMediaPlayer方法被调用它应该如何但是

if(play != null) {}
当我从一个活动中调用它时,

总是错误的。但我不知道为什么。