2012-06-25 14 views
7

Tengo un Spinner con iteración onItemSelected que funciona, pero la forma en la especificación de la API dice:Android: artículo Spinner en tecleo does't de trabajo si ya está seleccionado

This callback is invoked only when the newly selected position is different from the 
previously selected position or if there was no selected item. 

Necesito eliminar esta limitación y quiero que se invoque la devolución de llamada también si el usuario selecciona el mismo elemento. ¿Como hacer eso?
¿Alguien hizo lo mismo?

Cualquier idea sobre esto sería apreciable ..

+0

try with setOnItemClickListener –

+0

También estoy buscando lo mismo .... – Sri

+0

Posible duplicado de [¿Cómo puedo obtener un evento en Android Spinner cuando el elemento seleccionado actual se selecciona de nuevo?] (Http://stackoverflow.com/ preguntas/5335306/how-can-i-get-an-ev ent-in-android-spinner-when-the-current-selected-item-is-sele) – stefan222

Respuesta

1

i want that the callback is invoked also if the user select the same element. How to do that?

Ajuste del OnItemClickListener para un hilandero lanzará una excepción y el uso de ItemSelectedListener que no se le notificará si el usuario pulsa en el mismo elemento/seleccionado .

Supongo que la única manera de superar esta limitación es usar un adaptador personalizado para los artículos de Spinner e implementar el setOnClickListener para cada vista en el adaptador.

+0

gracias por responder arun ... lo intentaré ... – Hulk

1

Tuve el mismo problema y miré un poco. Puede haber varias formas de que funcione esta funcionalidad, pero el que extiende la ruleta funcionó para mí. Podría hacer algo similar a lo que encontré here.

Por lo tanto, en lugar de utilizar el spinner predeterminado de Android, pruébelo y añádale código que activará su método de devolución de llamada.

me gustaría añadir que el uso de la setOnItemClickListener en un Spinner arrojará una excepción como se indica en la documentación:

A spinner does not support item click events. Calling this method will raise an exception. 
0

En este caso, usted tiene que hacer un control de número personalizado: probar este

public class MySpinner extends Spinner{ 

OnItemSelectedListener listener; 

public MySpinner(Context context, AttributeSet attrs) 
{ 
    super(context, attrs); 
} 

@Override 
public void setSelection(int position) 
{ 
    super.setSelection(position); 

    if (position == getSelectedItemPosition()) 
    { 
     listener.onItemSelected(null, null, position, 0); 
    }  
} 

public void setOnItemSelectedListener(OnItemSelectedListener listener) 
{ 
    this.listener = listener; 
} 
} 
Cuestiones relacionadas