2016-05-23 10 views
0

Ich mache eine Soundboard App. Ich habe eine String-Liste von Sound-Beschreibungen, die die ListView auffüllen. Mein onItemClick übernimmt eine switch-Anweisung, die jeden Sound seiner String-Beschreibung aus der Liste zuweist. Die Sounds funktionieren, wenn auf den Listeneintrag geklickt wird, aber nach so vielen Klicks hören alle Sounds auf. Die switch-Anweisung sieht in meinem ItemOnClick wie folgt aus:Jedes Element einer ListView spielt eine andere (kurze) Mediendatei. Nach so vielen Clips höre ich keinen Ton mehr

switch (soundName){ 
    case "magic whoosh": 
     mediaPlayer = MediaPlayer.create(context, R.raw.magic_whoosh); 
     mediaPlayer.start(); 
     break; 
    case "magic poof": 
     mediaPlayer = MediaPlayer.create(context, R.raw.magic_poof); 
     mediaPlayer.start(); 
     break; 
} 
+0

Stoppen Sie den aktuellen MediaPlayer ordnungsgemäß, bevor Sie mit dem nächsten fortfahren. –

+0

Ich habe versucht, einen Media Player.stop() am Ende jedes Falles hinzuzufügen, aber dann würde der Ton überhaupt nicht spielen. –

+0

mediaplayer.stop() und dann mediaplayer.reset() aufrufen Dann kannst du mit dem gleichen mediaplayer-Objekt eine andere Datei abspielen mit setDataSource() –

Antwort

0

Wie angefordert eine mögliche Antwort;

//declare instance variable 
static MediaPlayer mediaPlayer; 

//handle listview on item click 
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        if(mediaPlayer==null){ 
         mediaPlayer=new MediaPlayer(); 
         try{ 
         mediaPlayer.setDataSource(//datasource based on position); 
         mediaPlayer.prepare(); //this uses the same UI thread 
         mediaPlayer.start(); 
         }catch(Throwable e){ 
         //handle possible errors 
         } 
        }else{ 
         if(mediaPlayer.isPlaying())mediaPlayer.stop(); 
         mediaPlayer.reset(); 
         try{ 
         mediaPlayer.setDataSource(//datasource based on position); 
         mediaPlayer.prepare(); //this uses the same UI thread 
         mediaPlayer.start(); 
         }catch(Throwable e){ 
         //handle possible errors 
         } 
        } 
       } 
}); 
Verwandte Themen