2016-12-10 44 views
0

我寫響應列表視圖的項目點擊一個代碼的方式。我打算在列表中單擊的項目將通過Toast消息返回媒體源的URI,然後開始播放。安卓:OnItemClickListener不工作我預期

這是代碼。

lvAlarmTones.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 
     ringtone = ringtoneSources.get(position); 
     Uri toneUri = Uri.parse(ringtone); 
     mediaPlayer = new MediaPlayer(); 
     try { 
      mediaPlayer.setDataSource(ChooseAlarmToneActivity.this, toneUri); 
      mediaPlayer.start(); 
      Log.i(ApplicationManager.LOG, "Media loaded: " + ringtone); 

     } catch (IOException e) { 
      Toast.makeText(ChooseAlarmToneActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
     Toast.makeText(ChooseAlarmToneActivity.this, ringtone, Toast.LENGTH_SHORT).show(); 
    } 
}); 

當我運行這段代碼,我設法順利拿到Toast與URI,但我還是不能讓媒體播放。

+0

而不是每次創建mediaPlayer時,創建一個全局並用於每個項目點擊。嘗試在try塊內結束吐司。並再次運行 – Noorul

+0

@Ahamed好的,我改變了你說的代碼。但我仍然無法播放媒體。 –

+0

你有沒有LogCat錯誤。如果是,請寄出。 – Noorul

回答

0

我通過修改代碼如下解決了這個問題。

lvAlarmTones.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 
      ringtone = ringtoneSources.get(position); 
      Uri toneUri = Uri.parse(ringtone); 

      if(mediaPlayer != null) { 
       mediaPlayer.stop(); 
       mediaPlayer.release(); 
      } 
      mediaPlayer = MediaPlayer.create(ChooseAlarmToneActivity.this, toneUri); 
      mediaPlayer.start(); 
      Toast.makeText(ChooseAlarmToneActivity.this, ringtone, Toast.LENGTH_SHORT).show(); 
     } 
    }); 
0

這意味着你的點擊監聽器沒有任何問題,但蹊蹺的媒體播放器代碼執行。

mediaPlayer = new MediaPlayer(); 
      try { 
       mediaPlayer.setDataSource(ChooseAlarmToneActivity.this, toneUri); 
       mediaPlayer.start(); 
       Log.i(ApplicationManager.LOG, "Media loaded: " + ringtone); 

      } catch (IOException e) { 
       Toast.makeText(ChooseAlarmToneActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show(); 
      } 

檢查捕獲異常,你會發現一個錯誤,我強烈建議處理錯誤使用OnErrorListener