2011-03-07 45 views
16

Tengo dos spinner en mi sistema. Ahora tengo que cambiar el valor seleccionado de la segunda ruleta según el primer valor de ruleta. Tan pronto como el usuario cambie el primer valor del rotor, el segundo valor del rotor se configurará automáticamente dependiendo del valor seleccionado del primer girador. ¿Cómo implementar esto?Spinner en el valor Change

Respuesta

15

Desde el Hello Spinner tutorial:

A continuación, cree una clase anidada que implementa AdapterView.OnItemSelectedListener. Esto proporcionará un método de devolución de llamada que notificará a su aplicación cuando se haya seleccionado un elemento del Spinner. Esto es lo que esta clase debe ser similar:

public class MyOnItemSelectedListener implements OnItemSelectedListener { 

    public void onItemSelected(AdapterView<?> parent, 
     View view, int pos, long id) { 
     Toast.makeText(parent.getContext(), "The planet is " + 
      parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show(); 
    } 

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

El AdapterView.OnItemSelectedListener requiere los onItemSelected() y onNothingSelected() métodos de devolución de llamada. El primero se invoca cuando se selecciona un elemento de AdapterView, en cuyo caso, un mensaje corto de Toast muestra el texto seleccionado; y el último se invoca cuando desaparece una selección del AdapterView, lo que no sucede en este caso, por lo que se ignora. Ahora, el MyOnItemSelectedListener debe aplicarse al Spinner. Vuelva al método onCreate() y agregue la siguiente línea al final: spinner.setOnItemSelectedListener (new MyOnItemSelectedListener());

En otras palabras, necesita crear un OnItemSelectedListener que modifique el valor de la segunda rueda giratoria y lo conecte al primer girador.

+0

¿No es posible implementarlo sin utilizar "implements"? –

+2

No entiendo la pregunta. Puede crear una clase anónima que implemente la interfaz, pero sí debe crear en algún momento un objeto que implemente esa interfaz para agregarla como un detector para el spinner. – I82Much

3

Tienes que poner la condición en onItemSelected del primer spinner. Por este ejemplo se puede obtener el valor de la segunda spinner dependiendo de primera spinner:

 public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) { 

     if(arg0.equals(spin0)){ 
     spin1.setClickable(true); 
        if(spin0.getSelectedItem().equals("India")) 
        { 
         ArrayAdapter <String> s1 = new ArrayAdapter <String> (this,android.R.layout.simple_spinner_item,states_india); 
         s1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
         spin1.setAdapter(s1); 
        } 
        else if(spin0.getSelectedItem().equals("Pakistan")) 
        { 
         ArrayAdapter <String> s2 = new ArrayAdapter <String> (this,android.R.layout.simple_spinner_item,states_pak); 
         s2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
         spin1.setAdapter(s2); 
        } 
        else if(spin0.getSelectedItem().equals("China")) 
        { 
         ArrayAdapter <String> s3 = new ArrayAdapter <String> (this,android.R.layout.simple_spinner_item,states_china); 
         s3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
         spin1.setAdapter(s3); 
        } 

     } 

    }  
+0

Una ruleta no admite eventos de clic de elemento. Llamar a este método generará una excepción. En su lugar, use AdapterView setOnItemSelectedListener. – felansu

1

debe definir el onItemSelected() por separado para cada spinner. De lo contrario, el código se ejecuta si se selecciona algo de cualquiera de los giradores.

newCategory.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      // TODO Auto-generated method stub 

      String selCat = newCategory.getItemAtPosition(arg2).toString(); 

      if (selCat != "New") 
      { 
       loadSpinnerData(topic); 
      } 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 
    newTopic.setOnItemSelectedListener(new OnItemSelectedListener() { 


     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
      long arg3) { 
      // TODO Auto-generated method stub 
      loadSpinnerData() 
    } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 
     } 
    }); 
+1

setOnItemClickListener no se puede utilizar con spinner – sandeep

+0

Esto funciona bien si usted más que spinner en la actividad actual - no sé por qué el voto hacia abajo ..... – DVN