2011-08-22 19 views
5
caso

Spinner OnClickListener ejecuta dos veces - una inicializacióncaso Spinner OnClickListener ejecuta dos veces, cómo manejar ambos eventos

  • Spinner
  • seleccionado User manual

donde como implementación de oyente es como:

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {   
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

      } 

      public void onNothingSelected(AdapterView<?> parent) { 

      } 
     }); 

Definición del problema

Quiero guardar el texto seleccionado por el usuario en el almacenamiento de datos, cuando el usuario selecciona cualquier elemento del girador, y puedo hacerlo. Pero mi otra tarea es mostrar el elemento seleccionado previamente (acceso desde el almacenamiento de datos) como elemento seleccionado en spinner, pero cada vez que llamo a la actividad de spinner, spinner muestra el primer ítem como ítem seleccionado por defecto, y también en almacenamiento de datos hace cambio anterior elemento por defecto.

¿Cómo puedo diferenciar entre los eventos 'Inicialización de inicializador' y 'Seleccionado manualmente'?

Respuesta

7

Tiene que manejar ambos eventos lógicamente. Como estas referencias (Android Spinner selection, problem on spinner) dice que tiene que usar la variable de bandera para manejar esto, estoy poniendo una muestra de código.

Espero que esto le ayude a aclarar su lógica.

public class TestActivity extends Activity { 

    //Checks report spinner selection is default or user selected item 
    private boolean isDefaultSelection; 
    //Spinner setup 
    Spinner spinner; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.your_layout); 

     // Set true at onCreate 
     isDefaultSelection = true; 

     spinner = (Spinner) findViewById(R.id.id_of_spinner);  
     ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String> (this, R.layout.drop_down_custom_row, data); 
     //Implement custom view for drop down of spinner 
     //spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(spinnerAdapter); 
     spinner.setOnItemSelectedListener(new OnItemSelectedListener() {   
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

       if(isDefaultSelection) { //If spinner initializes 
        spinner.setSelection("Set_here_id_of_data_item_from_storage_which_was_previously_stored"); 
        isDefaultSelection = false; 
       } else { //If user manually select item 
        int itemPosition = spinner.getSelectedItemPosition(); 
        //Write here code to store selection (itemPosition) of user into data storage 
       } 
      } 

      public void onNothingSelected(AdapterView<?> parent) { 
       //User selected same item. Nothing to do. 
      } 
     }); 

    } 

} 

Espero que aclare sus dudas.

Cuestiones relacionadas