2012-04-18 21 views
7

Quiero capturar el evento onClick cuando el usuario selecciona un valor de rueda giratoria.Cómo capturar el evento onClick en Android para una rueda giratoria

He intentado implementar OnClickListener y usando el siguiente código:

@Override 
public void onClick(final View view) { 
    if (view == countrySpinner) { 
    Toast.makeText(this, "Override OK!", 3); 
    } 
} 

Y vinculante con:

countrySpinner.setOnClickListener(this); 

Esto compila, pero me da un RuntimeException aconsejándome utilizar OnItemClickListener en lugar de OnClickListener para un AdapterView.

¿Cómo puedo capturar ese evento onClick?

+0

'Spinner' no admite eventos de clic, como la excepción claramente le dice. Utilice eventos de selección o no use un 'Spinner'. – CommonsWare

+0

@CommonsWare, ¿cómo podría entonces cargar los elementos de la lista de Spinner desde un servicio web sin hacerlo con impaciencia? ¿Simplemente no es posible hacer esto? (Parece una gran limitación) –

+0

Cargar contenido en un 'Spinner' no tiene nada que ver con los eventos de clics, así como generar una página web no tiene nada que ver con que alguien haga clic en un enlace en la página una vez cargado en un navegador. No tengo idea de lo que piensas "ansiosamente". Si tiene preguntas sobre cómo rellenar un 'Spinner', abra una nueva pregunta sobre SO. – CommonsWare

Respuesta

16

En lugar de configurar el OnClickListener del enrutador, intente configurar OnTouchListener y OnKeyListener.

spinner.setOnTouchListener(spinnerOnTouch); 
spinner.setOnKeyListener(spinnerOnKey); 

y los oyentes:

private View.OnTouchListener spinnerOnTouch = new View.OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_UP) { 
      //Your code 
     } 
     return false; 
    } 
}; 
private static View.OnKeyListener spinnerOnKey = new View.OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { 
      //your code 
      return true; 
     } else { 
      return false; 
     } 
    } 
}; 
+2

Su código hará que el 'Spinner' completamente inutilizable, al consumir todos los eventos táctiles y de teclas. Si ese es el objetivo, el OP debería simplemente usar un 'Botón'. – CommonsWare

+0

@CommonsWare Espero que esto funcione ahora ... por error, devuelvo true en onTouchListener. Debería ser falso – ValayPatel

+1

Dudo que ayude. Encadena a la superclase si quieres que la superclase tenga su comportamiento normal. – CommonsWare

10

No trate a una ruleta como un botón, botones tienen eventos onClick. Los hilanderos tienen eventos onItemSelected.

Debe estar capturando caso onItemSelected del hilandero de esta manera:

import android.widget.AdapterView; 

Spinner productname_spinner =(Spinner) findViewById(R.id.your_spinner); 

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

     Object item = parent.getItemAtPosition(pos); 
     System.out.println(item.toString());  //prints the text in spinner item. 

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