好吧,我有一个带声音的ListView。当我单击其中一个时,它开始播放该歌曲,但是当我单击其他一个/一个时,它仍在播放。我想做的就是当我按下另一个声音时停止声音。我用谷歌搜索,在这里找到与解决方案完全相同的问题,但对我不起作用。我收到错误消息,它说:“ MediaPlayer类型的方法setDataSource(String)不适用于参数(int)”。我只是不知道如何获取特定的位置,单击了哪个“项目行”。这是我现在在onListItemClick()方法中所拥有的:
@Override
public void onListItemClick(ListView parent, View v, int position, long id) {
Minions s = (Minions) mSounds.get(position);
MediaPlayer mPlayer;
final boolean isPlaying = false;
if(!isPlaying){
mPlayer = new MediaPlayer();
mPlayer.setDataSource(s.getSoundResourceId());
mPlayer.prepare();
mPlayer.start();
isPlaying = true;
}else{
isPlaying = false;
mPlayer.stop();
mPlayer.reset();
mPlayer.setDataSource(s.getSoundResourceId());
mPlayer.prepare();
mPlayer.start();
isPlaying = true;
}
mPlayer.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mPlayer) {
mPlayer.release();
isPlaying = false;
}
});
}
最佳答案
在您的情况下,这就是我的处理方式:
代替:
mediaPlayer= new MediaPlayer();
mediaPlayer.setDataSource(s.getSoundResourceId());
采用:
mediaPlayer=MediaPlayer.create(context,R.raw.blabla);
在这里你不需要
prepare
private MediaPlayer mPlayer;
....
@Override
public void onListItemClick(ListView parent, View v, int position, long id) {
final boolean isPlaying = false;
if(!isPlaying){
mediaPlayer=MediaPlayer.create(context,R.raw.blabla);
mPlayer.start();
isPlaying = true;
}else{
isPlaying = false;
mPlayer.stop();
mPlayer.reset();
mediaPlayer=MediaPlayer.create(context,R.raw.blabla);
mPlayer.start();
isPlaying = true;
}
mPlayer.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mPlayer) {
mPlayer.release();
isPlaying = false;
}
});
}
关于android - onListItemClick()开始/停止歌曲,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18015018/