您好我现在正在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?
答案 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) {}
当我从一个活动中调用它时,总是错误的。但我不知道为什么。