2010-01-25 5 views
3

d'un spinner j'ai une fileuse « ouverture » mis en place avec une liste de numéros, et un « mode » spinner avec deux options. Quand un bouton est poussé, j'ai besoin d'un calcul pour utiliser différentes entrées, y compris la sélection actuelle de 'ouverture' et une valeur dérivée de 'mode'. Comment puis-je appeler la valeur d'un spinner afin que je puisse l'utiliser dans un calcul?Appelez la valeur d'un spinner? En outre, utiliser d'autres valeurs basées sur la valeur

En outre, comment puis-je utiliser la sélection de la fileuse « mode pour régler cette autre valeur avant implimenting dans le calcul? Pour être plus précis, si le spinner est réglé sur Small alors la valeur que j'utilise dans le calcul est 0.015, alors que si Large est sélectionné, je dois utiliser 0.028

Mes autres entrées sont des vues EditText, donc maintenant je suis réglé comme ceci:

input = (EditText) findViewById(R.id.input1); 
    input2 = (EditText) findViewById(R.id.input2); 
    input3 = (EditText) findViewById(R.id.input3); 
    input4 = (EditText) findViewById(R.id.input4); 
    output = (TextView) findViewById(R.id.result); 
    output2 = (TextView) findViewById(R.id.result2); 

    //aperture dropdown 
    Spinner s = (Spinner) findViewById(R.id.apt); 
    ArrayAdapter adapter2 = ArrayAdapter.createFromResource(  this, R.array.apertures,  
    android.R.layout.simple_spinner_item); 
    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    s.setAdapter(adapter2); 

    //button 
    final Button button = (Button) findViewById(R.id.calculate); 
    button.setOnClickListener(new View.OnClickListener() {    
    public void onClick(View v) {     
     // Perform action on click 
     doCalculation(); 
     }   
     }); 
    } 

private void doCalculation() { 
    // Get entered input value 
    String strValue = input.getText().toString(); 
    String strValue2 = input2.getText().toString(); 
    String strValue3 = input3.getText().toString(); 
    String strValue4 = input4.getText().toString(); 

    // Perform a hard-coded calculation 
    double imperial1 = (Double.parseDouble(strValue3) + (Double.parseDouble(strValue4)/12)); 
    double number = Integer.parseInt(strValue) * 2; 
    double number2 = ((number/20) + 3)/Integer.parseInt(strValue2); 

    // Update the UI with the result 
    output.setText("Result: "+ number); 
    output2.setText("Result2: "+ imperial1); 
} 
} 

Ce n'est pas l'équation réelle, c'est juste un test pour s'assurer que tout se connecte correctement. Comment puis-je appeler la valeur de spinner « ouverture » et le Petit/Grand spinner « mode »

Répondre

4

Pour obtenir la valeur de l'appel spinner une des opérations suivantes, selon le cas:

Object item = spinner.getSelectedItem(); 

long id = spinner.getSelectedItemId(); 

int position = getSelectedItemPosition(); 

View selectedView = getSelectedView(); 

Dans votre cas, vous pouvez déclarer la tourbillonnement finale et passer l'élément sélectionné dans la méthode doCalculations() comme suit:

final Spinner aptSpinner = (Spinner) findViewById(R.id.apt); 
    ... 

    //button 
    final Button button = (Button) findViewById(R.id.calculate); 
    button.setOnClickListener(new View.OnClickListener() {    
    public void onClick(View v) {     
     // Perform action on click 
     doCalculation(aptSpinner.getSelectedItem()); 
     }   
     }); 
    } 

    private void doCalculation(Object selectedItem) { 

     ... 

    } 

Il serait probablement bon pour vous de choisir un livre Java de base et découvrez comment la portée en Java fonctionne.

+0

Merci pour la réponse. Je suis très nouveau à Java, donc je m'excuse. Je crois que Object item = spinner.getSelectedItem(); est la bonne, mais comment l'implémenter? Lorsque j'essaie de l'appeler à partir du calcul, Eclipse dit qu'il ne peut pas résoudre «ouverture». Cela fonctionne bien si je mets le code en dehors du calcul, mais alors dans le calcul il ne peut pas résoudre le nom de l'objet (dans votre exemple "item") – Sean

+0

Merci pour la mise à jour. Eclipse ne montre aucune erreur, mais quand j'ai "Object item = aperture.getSelectedItem();" (Le spinner est nommé ouverture, pas aptSpinner comme dans votre exemple) dans le calcul, il provoque le crash de l'application lorsque je clique sur le bouton. Qu'est-ce qui pourrait causer ça? Désolé encore pour toutes les questions. Je sais que je devrais apprendre le java d'abord et ne pas sauter dans la tête la première comme ceci, mais j'ai besoin de cette application pour un tournage de film ce week-end. Inutile de dire, je vais bientôt avoir des livres Java de toute façon :) – Sean

+0

quelle est l'exception? –

0

Si R.array.apertures est un tableau de chaînes, vous pouvez utiliser

Object item = spinner.getSelectedItem(); 

if(item != null) { 

String SelectedString = item.toString(); 

} 

Si son tout autre objet dire personne.

puis

if(item != null) { 

Person SelectedString = (Person) item; 

} 
2

Pourquoi ne pas remplir votre ArrayAdapter programme avec des objets d'un type connu et l'utiliser. J'ai écrit un tutoriel de nature similaire (lien en bas) qui fait cela. Le principe de base est de créer un tableau d'objets Java, de dire le spinner à propos du, puis d'utiliser ces objets directement depuis la classe spinner. Dans mon exemple, j'ai un objet représentant un « Etat » qui est défini comme suit:

package com.katr.spinnerdemo;

État public class {

// Okay, full acknowledgment that public members are not a good idea, however 
// this is a Spinner demo not an exercise in java best practices. 
public int id = 0; 
public String name = ""; 
public String abbrev = ""; 

// A simple constructor for populating our member variables for this tutorial. 
public State(int _id, String _name, String _abbrev) 
{ 
    id = _id; 
    name = _name; 
    abbrev = _abbrev; 
} 

// The toString method is extremely important to making this class work with a Spinner 
// (or ListView) object because this is the method called when it is trying to represent 
// this object within the control. If you do not have a toString() method, you WILL 
// get an exception. 
public String toString() 
{ 
    return(name + " (" + abbrev + ")"); 
} 
} 

Ensuite, vous pouvez remplir une fileuse avec un tableau de ces classes comme suit:

 // Step 1: Locate our spinner control and save it to the class for convenience 
    //   You could get it every time, I'm just being lazy... :-) 
    spinner = (Spinner)this.findViewById(R.id.Spinner01); 

    // Step 2: Create and fill an ArrayAdapter with a bunch of "State" objects 
    ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(this, 
      android.R.layout.simple_spinner_item, new State[] { 
       new State(1, "Minnesota", "MN"), 
       new State(99, "Wisconsin", "WI"), 
       new State(53, "Utah", "UT"), 
       new State(153, "Texas", "TX") 
       }); 

    // Step 3: Tell the spinner about our adapter 
    spinner.setAdapter(spinnerArrayAdapter); 

Vous pouvez récupérer l'élément sélectionné comme suit:

State st = (State)spinner.getSelectedItem(); 

Et maintenant, vous avez une classe bonafied java pour travailler avec. Si vous voulez intercepter lorsque les changements de valeur spinner, mettre en œuvre tout le OnItemSelectedListener et ajouter les méthodes appropriées pour gérer les événements.

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
{ 
    // Get the currently selected State object from the spinner 
    State st = (State)spinner.getSelectedItem(); 

    // Now do something with it. 
} 

public void onNothingSelected(AdapterView<?> parent) 
{ 
} 

Vous trouverez le tutoriel tout ici: http://www.katr.com/article_android_spinner01.php