2011-12-08 23 views
5

Un normale android Spinner farà apparire un elenco di scelte quando si fa clic. Voglio ignorare questo onClick. Quando l'utente fa clic sullo spinner durante determinati stati di errore, desidero visualizzare un messaggio di errore anziché visualizzare l'elenco di scelte. Attualmente, tutto ciò che posso fare è impostare un OnClickListener, ma il suo metodo onClick non mi impedisce di visualizzare l'elenco di opzioni.Come ignorare onClick su Android Spinner?

risposta

0

Vorrei provare a creare una classe MySpinnerAdapter, che implementa SpinnerAdapter. Nel tuo MySpinnerAdapter, dai un'occhiata al metodo getDropDownView. Credo che sia qui che viene creata la vista popup. È possibile controllare il proprio stato di errore e decidere di restituire una vista diversa (anche se potrebbe essere in un'altra funzione -> controllare la documentazione) ...

In ogni caso, questa risposta non è una copia-incolla. Sto solo cercando di sputare alcune nuove idee

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

estende da Spinner e ignorare performClick() in questo modo:

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

Vedi fonti per ulteriori dettagli. Spero che questo ti aiuti.

+1

migliore e più semplice – Entreco

5

impostando un onTouchListener e nel metodo onTouch visualizzare il popup e tornare true a consumare l'evento e impedirgli di propagazione alla vista (Spinner in questo caso) prova.

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

Questo dovrebbe interrompere l'"elenco a discesa" dall'apparire.

Edit: dimenticato di dire che si possa fare il vostro errore di controllo dello stato nel metodo onTouch pure, in modo da non disattivare completamente la filatrice.

+1

Le osservazioni sotto la modifica sono ciò che ho finito per andare con. Minima intrusione per ottenere una limitazione del controllo dei frammenti incrociati in stati diversi. – James