2010-04-21 3 views
0

J'ai ce code:Obtenir une variable d'un public void (Android)

hubSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
     final MediaPlayer mp2 = MediaPlayer.create(Textbox.this, R.raw.hero); 
     mp2.start(); 
     } 
     public void onNothingSelected(AdapterView<?> parentView) { 
     } 
    }); 

(Le code fonctionne essentiellement lorsqu'un nouvel élément est sélectionné d'une fileuse et joue alors une chanson, -qui plus tard sera une variable en fonction de ce qui a été choisi, mais je suis bien comme il est pour l'instant)

problème:

Et je veux être en mesure d'utiliser « MP2 » de ce public void, (je veux un bouton qui fait une pause) Comment est-ce que je peux faire ceci?

S'il vous plaît expliquer/spectacle ...

Merci beaucoup

James

Répondre

0

Déplacez la variable mp2 vers l'instance de la classe parente. Cela gardera une référence courante à laquelle vous pouvez interagir quand vous le souhaitez. Vous devrez supprimer le qualificatif final si MediaPlayer.create(...) sera appelé plus d'une fois et stocké.


modifier:

Je faisais allusion à quelque chose le long des lignes de ce:

class SomeClass { 
    private MediaPlayer mp2 = null; 

    private void whateverFunctionYouAreIn() { 
     hubSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
      public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
       SomeClass.this.mp2 = MediaPlayer.create(Textbox.this, R.raw.hero); 
       SomeClass.this.mp2.start(); 
      } 
      public void onNothingSelected(AdapterView<?> parentView) {} 
     }); 

     //TODO: put this in an onClickListener: 
     if (this.mp2 != null) { 
      this.mp2.pause(); 
     } 
    } 
} 
+0

J'en ai besoin à l'intérieur ... (Pour les raisons mises sur le commentaire sur la réponse de Chris) –

+0

Voir mes modifications. Exactement le même que votre code, sauf que vous stockez l'objet 'MediaPlayer' dans l'instance de classe principale. –

+0

Alors, je viens de mettre le bouton (pause) dans la «Some Class» - mais pas dans le vide privé? -et ça va marcher? –

0

Je ne sais pas ce qui se passe lorsque vous appelez MediaPlayer.create(Textbox.this, R.raw.hero), mais en supposant qu'il n'a pas d'effets immédiats, vous pouvez créer simplement l'objet en dehors de l'auditeur.


Édition1: OK, alors qu'en pensez-vous?

MediaPlayer currentPlayer; 

methodA() 
{ 
    hubSpinner.setOnItemSelectedListener(new OnItemSelectedListener() 
    { 
     public void onItemSelected(AdapterView<?> parentView, 
      View selectedItemView, int position, long id) 
     { 
      MediaPlayer mp2 = MediaPlayer.create(Textbox.this, R.raw.hero); 
      mp2.start(); 
      setPlayer(mp2); 
     } 
     public void onNothingSelected(AdapterView<?> parentView) { 
    } 
}); 


setMediaPlayer(MediaPlayer player) 
{ 
    currentPlayer = player; 
} 
+0

Ouais, je sais, mais comme je le disais à l'avenir (après avoir résolu ce problème) je vais utilisez 'R.raw. **** Valeur variable de spinner *****' à la place - pour trouver la piste mp3. -Alors ça ne peut pas sortir, -ou peut-il? :) –

+0

Je ne sais pas d'où vient R.raw, je n'ai pas d'expérience Android, mais ça ne ressemble pas à une variable locale, donc vous pouvez probablement le mettre où vous voulez. – Chris

+0

Tant pis :) Merci quand même –

Questions connexes