2012-09-21 10 views
16

Uso la casella di selezione a discesa con l'adattatore del cursore. Contiene per esempio da 1 a 100 articoli. Seleziono ad es. articolo 50. L'articolo è selezionato. La prossima volta che apro lo spinner, la prima riga visibile è la voce 50. Come posso ottenerlo quando apro lo spinner si focalizzerà sulla prima voce/il primo oggetto visibile sarà l'articolo 1?Spinner: messa a fuoco sul primo elemento

Voglio dire autoscenalare verso l'alto nell'elenco, quindi il primo elemento visibile nel menu a discesa è il primo e non uno selezionato.

risposta

31

È possibile effettuare la Spinner fare ciò che si vuole estendendolo e sovrascrivendo i due metodi che sono responsabili per l'installazione/mostra la lista di valori:

public class CustomSpinnerSelection extends Spinner { 

    private boolean mToggleFlag = true; 

    public CustomSpinnerSelection(Context context, AttributeSet attrs, 
      int defStyle, int mode) { 
     super(context, attrs, defStyle, mode); 
    } 

    public CustomSpinnerSelection(Context context, AttributeSet attrs, 
      int defStyle) { 
     super(context, attrs, defStyle); 
    } 

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

    public CustomSpinnerSelection(Context context, int mode) { 
     super(context, mode); 
    } 

    public CustomSpinnerSelection(Context context) { 
     super(context); 
    } 

    @Override 
    public int getSelectedItemPosition() { 
     // this toggle is required because this method will get called in other 
     // places too, the most important being called for the 
     // OnItemSelectedListener 
     if (!mToggleFlag) { 
      return 0; // get us to the first element 
     } 
     return super.getSelectedItemPosition(); 
    } 

    @Override 
    public boolean performClick() { 
     // this method shows the list of elements from which to select one. 
     // we have to make the getSelectedItemPosition to return 0 so you can 
     // fool the Spinner and let it think that the selected item is the first 
     // element 
     mToggleFlag = false; 
     boolean result = super.performClick(); 
     mToggleFlag = true; 
     return result; 
    } 

} 

Dovrebbe funzionare bene per quello che vuoi fare.

+2

Ottima risposta! Grazie! – vandzi

+1

Ho cercato qualcosa di simile ... 3 anni dopo ed è ancora una buona notizia! Grazie amico – BinaryShrub

+0

Così bello !. Grazie mille! – sonnv1368

2

È possibile impostare la selezione di uno Spinner alla prima voce in questo modo:

yourspinner.setSelection(0); 

si potrebbe desiderare di fare questo nel metodo onStart().

+4

Questo seleziona il primo elemento. Non voglio selezionare il primo oggetto. Scorri solo fino al primo oggetto, quindi posso vedere la voce del pugno nell'elenco a discesa. – vandzi

1

Questo corto di codice farà il lavoro per voi.

int prevSelection=0; 
    spSunFrom = (Spinner) findViewById(R.id.spTimeFromSun); 
    spSunFrom.setOnTouchListener(new OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      prevSelection = spSunFrom.getSelectedItemPosition(); 
      spSunFrom.setSelection(0); 
      return false; 
     } 
    }); 
    spSunFrom.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      if(arg2==0) 
       spSunFrom.setSelection(prevSelection); 
      prevSelection = arg2; 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      spSunFrom.setSelection(prevSelection); 
     } 
    }); 
+1

Bel codice, ma non esattamente quello che cerco. Non voglio selezionare il primo oggetto. Voglio solo scorrere fino al primo elemento. Quindi, quando apri lo spinner, vedrai il primo elemento in cima allo – vandzi

+0

Sì ma per mostrare il primo elemento ... questo è l'unico modo che ho trovato :) – MKJParekh

+0

Non so quale sia la magia che devo fare ma funziona questo modo in app Android Gmail. Se hai in navigazione più elementi visibili sullo schermo (ad esempio in modalità orizzontale) ogni volta che apri lo spinner ti mostrerà il primo elemento in alto – vandzi