2012-09-21 28 views
16

Używam dropnera z adapterem kursora. Zawiera np. 1 - 100 przedmiotów. Wybieram np. pozycja 50. Element został wybrany. Następnym razem, kiedy otwieram spinner, pierwszy widoczny wiersz to pozycja 50. Jak to osiągnąć, kiedy otworzę spinner, skupi się on na pierwszym przedmiocie/pierwszym widocznym przedmiocie będzie item 1?Spinner - fokus na pierwszy element

Mam na myśli autoprzedsiębiorstwo w górę na liście, więc pierwszy widoczny element w liście rozwijanej jest pierwszy, a nie wybrany.

Odpowiedz

31

Można zrobić Spinner robić co chcesz, rozszerzając je i przesłanianie dwie metody, które są odpowiedzialne za konfigurację/pokazując listę wartości:

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; 
    } 

} 

To powinno działać dobrze na co chcesz robić.

+2

Świetna odpowiedź! Dziękuję Ci! – vandzi

+1

Szukałem czegoś takiego ... 3 lata później i nadal jest dobra informacja! Dzięki ziom. – BinaryShrub

+0

Tak świetnie !. Dziękuję bardzo! – sonnv1368

2

można ustawić na wybór Spinner do pierwszego elementu tak:

yourspinner.setSelection(0); 

Możesz chcieć zrobić to w sposób onStart().

+4

To wybierz pierwszy element. Nie chcę wybrać pierwszego elementu. Przewijaj tylko spinner do pierwszego elementu, więc widzę pozycję pięści na liście rozwijanej. – vandzi

1

Ten krótki kod wykona pracę za Ciebie.

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

Niezły kod, ale niekoniecznie to, czego szukam. Nie chcę wybrać pierwszego elementu. Chcę tylko przewinąć do pierwszego elementu. Więc kiedy otworzysz spinner, zobaczysz pierwszy element na górze – vandzi

+0

Tak, ale żeby pokazać pierwszy element ... to jedyny sposób, jaki znalazłem :) – MKJParekh

+0

Nie wiem, co jest magią, którą muszę zrobić, ale działa to sposób w aplikacji Gmail na Androida. Jeśli masz w nawigacji więcej elementów, które są widoczne na ekranie (na przykład w trybie poziomym) za każdym razem, gdy otwierasz spinner, pokaże ci pierwszy element na górze. – vandzi

Powiązane problemy