1

好吧,我有一个带有声音的 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;
            }

        });

    }
4

2 回答 2

2

在你的情况下,我会这样做:

反而:

        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;
        }

    });

}
于 2013-08-02T10:59:04.473 回答
1

尝试setDataSource(""+s.getSoundResourceId());

代替setDataSource(s.getSoundResourceId());

PS。也初始化mPlayer

喜欢 MediaPlayer mPlayer=new MediaPlayer();而不是MediaPlayer mPlayer;

并将其mPlayer = new MediaPlayer();从您的 if 条件中删除!

于 2013-08-02T10:49:05.650 回答