2012-09-21 16 views
16

Ich verwende Dropdown-Spinner mit Cursor-Adapter. Es enthält z.B. 1 bis 100 Artikel. Ich wähle z.B. Artikel 50. Artikel ist ausgewählt. Das nächste Mal, wenn ich die erste sichtbare Reihe des Spinner öffne, ist der Gegenstand 50. Wie kann ich erreichen, dass wenn ich den Spinner öffne, er sich auf den ersten Gegenstand richtet/der erste sichtbare Gegenstand wird Gegenstand 1 sein?Spinner - Fokus auf den ersten Artikel

Ich meine wie Autoscroll in der Liste, so erste sichtbare Element in Dropdown ist 1. und nicht ausgewählt.

Antwort

31

Sie können die Spinner tun, was man von ihm erstrecken soll, und überschreiben die beiden Methoden, die für die Einrichtung verantwortlich sind/zeigt die Liste der Werte:

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

} 

Es für das, was gut funktionieren sollte du möchtest machen.

+2

Große Antwort! Vielen Dank! – vandzi

+1

Ich habe so etwas gesucht ... 3 Jahre später und es ist immer noch eine gute Info! Danke, Alter. – BinaryShrub

+0

So groß !. Ich danke dir sehr! – sonnv1368

2

Sie können die Auswahl eines Spinner auf das erste Element wie folgt festgelegt:

yourspinner.setSelection(0); 

Sie könnten dies in der onStart() -Methode tun wollen.

+4

Wählen Sie das erste Element aus. Ich möchte nicht den ersten Artikel auswählen. Scrolle nur im Kreisel bis zum ersten Gegenstand, damit ich den ersten Gegenstand in der Dropdown-Liste sehen kann. – vandzi

1

Dieser kurze Code wird die Arbeit für Sie erledigen.

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

Guter Code, aber nicht genau das, wonach ich suche. Ich möchte nicht den ersten Artikel auswählen. Ich möchte nur zum ersten Artikel scrollen. Wenn du also den Spinner öffnest, wirst du den ersten Gegenstand oben sehen. – vandzi

+0

Ja, aber um den ersten Gegenstand zu zeigen ... gibt es den einzigen Weg, den ich gefunden habe :) – MKJParekh

+0

Ich weiß nicht, was die Magie ist, die ich tun muss, aber es funktioniert so Weg in android Google Mail App. Wenn Sie in der Navigation mehr Elemente haben, die auf dem Bildschirm sichtbar sind (z. B. im Querformat), wird bei jedem Öffnen des Spinner das erste Element oben angezeigt. – vandzi

Verwandte Themen