2013-08-02 64 views
1

嗯,我有一個帶聲音的ListView。當我點擊其中的一首歌曲時,它開始播放該歌曲,但當我點擊其他歌曲時,它仍在播放。我想要做的是當我按下另一個時,停止發出聲音。我谷歌,找到解決方案完全相同的問題,但它不會爲我工作。我得到錯誤,它說:「MediaPlayer類型中的方法setDataSource(String)不適用於參數(int)」。我只是不知道如何得到具體的位置,哪個項目行被點擊。這是我在onListItemClick()方法現在有: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; 
      } 

     }); 

    } 
+0

以獲得職位使用「職位」 – Lele

回答

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

    }); 

} 
+0

它的作用就像一個魅力。謝謝 :) –

1

嘗試setDataSource(""+s.getSoundResourceId());

,而不是setDataSource(s.getSoundResourceId());

PS。也初始化mPlayer

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

,並從你的病情是否刪除此mPlayer = new MediaPlayer();

+0

當我這樣做時,它會顯示「未處理的異常類型IOException」並提供使用try/catch進行環繞。當我圍繞它(幾次),我得到另一個錯誤:「局部變量mPlayer可能尚未初始化」,因此它初始化爲空和應用程序崩潰。 –

+0

@Danger所以你必須初始化mPlayer! –

+0

@丹格見我更新的答案! –