Java 如何更改OnClick Listener以停止当前声音并启动新的OnClick
你好,我现在正在Udacity做一个免费的课程来建立一个翻译应用程序。 还有一个任务,让ArrayList的ListItem在单击时播放声音。他们说你可以单独做,也可以和教程一起做。所以我自己做了,跳过了演示如何做的教程。 现在我带着我的工作代码回到教程。 然后他们给了我们另一个任务。在MediaPlayer停止播放后,使用OnStop方法释放资源。 但是我没有像他们在教程中那样完成前面的任务。现在我坚持完成新任务 我制作了一个自己的适配器“WordAdapter”,我有4个活动 在WordAdapter中,我创建了两个全局值: 私人媒体播放器播放; 私人互联网播放 在@OverrideMethod中 我将isPlaying的值设置为0Java 如何更改OnClick Listener以停止当前声音并启动新的OnClick,java,android,android-mediaplayer,Java,Android,Android Mediaplayer,你好,我现在正在Udacity做一个免费的课程来建立一个翻译应用程序。 还有一个任务,让ArrayList的ListItem在单击时播放声音。他们说你可以单独做,也可以和教程一起做。所以我自己做了,跳过了演示如何做的教程。 现在我带着我的工作代码回到教程。 然后他们给了我们另一个任务。在MediaPlayer停止播放后,使用OnStop方法释放资源。 但是我没有像他们在教程中那样完成前面的任务。现在我坚持完成新任务 我制作了一个自己的适配器“WordAdapter”,我有4个活动 在WordAd
isPlaying = 0;
我创建了一个onclick监听器
private MediaPlayer.OnCompletionListener mOnCompletion = new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
isPlaying = 0;
releaseMediaPlayer();
}
};
我创建了一个ImageButton宽度的OnClickListener
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);
}
});
然后我做了一个releaseMediaPlayerMethod:
public void releaseMediaPlayer() {
if (play != null){
play.release();
play = null;
}
}
在活动中,我制作了一个OnStop方法:
@Override
protected void onStop() {
super.onStop();
WordAdapter stopSoundAndReleasIt = new WordAdapter(this);
stopSoundAndReleasIt.releaseMediaPlayer();
}
因此,这段代码应该在单词完成播放后释放MediaPlayer的资源。
当用户离开应用程序后活动停止时,也应该释放资源。
当我在MediaPlayer播放声音时单击播放图标时,它应该停止当前声音并开始播放新选定的声音。
如果我在MediaPlayer播放声音时离开应用程序,它应该先停止声音,然后释放资源
但如果我点击播放图标,应用程序不会停止当前声音并启动新声音。它只是播放两种声音。或者,如果我点击三次,就会听到三个声音
如果我离开应用程序,它也不会停止当前的声音
那么,我需要做什么来更改,使其停止当前的声音onClick呢?我更改了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);
}
});
现在唯一的问题是,如果我点击home按钮,它不会调用'releaseMediaPlayer(…)'方法。而且实际的声音不会停止播放
在WordAdapter中,我有以下代码。我可以在活动中调用releaseMediaPlayer方法
public WordAdapter(Context context) {
super(context, 0, 0);
}
编辑:我现在遇到了真正的问题,releaseMediaPlayer方法被称为应该如何,但是
if(play != null) {}
当我从活动中调用它时,它总是错误的。但是我不知道为什么。我认为您应该在
onClick(…)
方法之外创建媒体播放器。现在,您总是在新创建的MediaPlayer
实例上调用stop()
和release()
,谢谢您的回答。但是如果我从onClick(…)
方法中取出.create
,当我点击播放图标时,应用程序停止工作。我认为如果声音没有播放,则不会调用stop()
方法,因为。创建应用程序时,通过onCompletion方法将iPlay值设置为0。