2011-12-08 43 views
5

Un android normal Spinner aparecerá una lista de opciones cuando se haga clic. Quiero anular esto enClick. Cuando el usuario hace clic en la ruleta durante ciertos estados de error, quiero mostrar un mensaje de error en lugar de mostrar la lista de opciones. Actualmente, todo lo que puedo hacer es establecer un OnClickListener, pero su método onClick no me permite evitar que aparezca la lista de opciones.Cómo sobrescribir OnClick en Android Spinner?

Respuesta

0

Intentaré crear una clase MySpinnerAdapter, que implemente SpinnerAdapter. En su MySpinnerAdapter, eche un vistazo al método getDropDownView. Creo que es donde se crea la vista emergente. Puede verificar su estado de error y decidir devolver una vista diferente allí (aunque podría estar en otra función -> consultar la documentación) ...

De todos modos, esta respuesta no es de copiar y pegar. Sólo tratando de escupir algunas nuevas ideas

public class yourActivity extends Activity 
{ 

    private class MySpinnerAdapter implements SpinnerAdapter 
    { 
     // There are quite a lot of methods you need to implement... 

     @Override 
     public View getDropDownView(int position, View convertView, ViewGroup parent) 
     { 
       // Check your error states here 
       if(<we have some kind of error>) 
        return specialErrorView // you get the idea 

       // return the default view with options 
       return normalView; 
     } 
    } 
} 
4

se extiende desde Spinner y anular performClick() así:

@Override 
public boolean performClick() { 
    if(errorOccured) { 
     // show validation message 
     return true; // the event is handled by ourselves 
    } 
    else { 
     return super.performClick(); // show spinner dialog 
    } 
} 

Ver las fuentes para obtener más detalles. Espero que esto ayude.

+1

mejor y más simple – Entreco

5

establecer un onTouchListener y en el método onTouch mostrar su emergente y volver a consumir true el evento y evitar que se propague a la vista (Spinner en este caso) intento.

spinner.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    // display your error popup here 
    return true; 
    } 
}); 

Esto debería evitar que aparezca la "lista desplegable".

Editar: se olvidó de mencionar que podría hacer su verificación de estado de error en el método onTouch también, por lo que no desactive completamente la ruleta.

+1

Las observaciones en la edición son a lo que terminé yendo. Intrusión mínima para obtener alguna limitación de control de fragmentos cruzados en diferentes estados. – James