2010-11-20 6 views
2

J'essaie d'obtenir un Spinner pour travailler dans Android. Il s'affiche très bien et je peux sélectionner l'une des options de la liste. Mais comment puis-je transférer cela à une chaîne? J'aurais pensé dans le code ci-dessous que 'selected' contiendrait la chaîne sélectionnée, mais j'obtiendrais un 'Illegal modifier' pour la classe locale YourItemSelectedListener; Seule l'erreur abstraite ou finale est permise sur 'YourItemSelectedListener'. Qu'est-ce que je fais de mal? Un grand merci pour toute aide.Utilisation de la sélection Spinner comme une valeur dans Android

Spinner spinnerFPS = (Spinner) findViewById(R.id.sp_FPS); 
     ArrayAdapter adapter = ArrayAdapter.createFromResource(
       this, R.array.framesps, android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinnerFPS.setAdapter(adapter); 
     spinnerFPS.setOnItemSelectedListener(new YourItemSelectedListener()); 


     public class YourItemSelectedListener implements OnItemSelectedListener { 

      public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 
       String selected = parent.getItemAtPosition(pos).toString(); 
      } 

      public void onNothingSelected(AdapterView parent) { 
       // Do nothing. 
      } 
     } 

Répondre

1

Puisque vous utilisez une ressource de tableau pour spinner créer une poignée de ressources avec déclaration locale du tableau getResources().getStringArray(R.array.framesps);

et ensuite utiliser cette poignée pour accéder à l'élément sélectionné à l'aide variable de position:

items[pos] 

Heres modifier un code:

Spinner spinnerFPS = (Spinner) findViewById(R.id.sp_FPS); 
    String[] items=getResources().getStringArray(R.array.framesps);//handle to your arrays 
ArrayAdapter adapter = ArrayAdapter.createFromResource(
      this, items, android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinnerFPS.setAdapter(adapter); 
    spinnerFPS.setOnItemSelectedListener(new YourItemSelectedListener()); 


    public class YourItemSelectedListener implements OnItemSelectedListener { 

     public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 
      String selected =items[pos]; // use handler to access select item 
     } 

     public void onNothingSelected(AdapterView parent) { 
      // Do nothing. 
     } 
    } 
+0

J'ai essayé et maintenant obtenir l'erreur suivante sur 'createFromResource': La méthode createFromResource (contexte, int, int) dans le type ArrayAdapter est pas applicable pour les arguments (TCCalc, String [], int) Je reçois aussi: 'YourItemSelectedListener ne peut pas être résolu en un type' et enfin sur les éléments [pos] Je reçois: Impossible de se référer à un élément variable non final dans une classe interne définie dans une méthode différente. J'ai besoin de voir une démonstration de travail du Spinner pour m'aider à comprendre ce qui se passe. Y a-t-il un exemple simple et réel? À votre santé. – Entropy1024

+0

J'espère que cela a fonctionné, vous pouvez toujours vérifier le code à partir du site google docs – Shardul

+0

Le problème avec ceci est que le premier élément est automatiquement sélectionné, et en le sélectionnant à plusieurs reprises ne déclenchera pas l'événement. Il n'y a aucun moyen de définir le spinner à un index -1 pour empêcher le premier élément d'être sélectionné, le rendant effectivement inutile pour ce type d'application. Ce serait une tâche très simple pour les codeurs Android pour résoudre ce problème. –

3
ArrayAdapter adapter = ArrayAdapter.createFromResource(
     this, items, android.R.layout.simple_spinner_item); 

Vous devrez ajouter le CurrentActivityName.this. Cela va résoudre le problème. Vous ne pouvez pas passer le contexte d'argument comme this. Vous devrez mettre ActivityName.this.

Questions connexes