2012-09-21 11 views
16

imleç adaptörüyle açılır kapanır döndürücüyü kullanırım. 1 - 100 ürün içerir. Ben örn. öğe 50. Öğe seçildi. Bir dahaki sefere spineri açtığımda ilk görülebilir satır, öğe 50'dir. Ben, spineri açtığımda, ilk maddeye/ilk görülebilir öğeye odaklanacağım, 1. maddeye nasıl ulaşabilirim?İplikçi - ilk maddeye odaklan

Listede otomatik gezinme gibi bir deyim var, bu nedenle ilk açılan öğe açılır menüden birincisi seçili değil.

cevap

31

Sen değerlerin listesini gösteren/uzatmakla ve kurulumundan sorumludur iki yöntem geçersiz kılarak Spinner istediğini yaptırabilir yapmak istiyorsun.

+2

Harika cevap! Teşekkür ederim! – vandzi

+1

Böyle bir şey arıyordum ... 3 yıl sonra hala iyi bir bilgi! Teşekkürler dostum. – BinaryShrub

+0

Çok iyi! Çok teşekkür ederim! – sonnv1368

2

Böyle ilk öğeye bir Spinner seçimini ayarlayabilirsiniz:

yourspinner.setSelection(0); 

Sen onStart() yönteminde bunu yapmak isteyebilirsiniz.

+4

Bu ilk öğeyi seçmenizi sağlar. İlk öğeyi seçmek istemiyorum. Yalnızca ilk öğeye kadar döndürücüde ilerleyin, böylece açılır menüde yumruk öğesini görebilirim. – vandzi

1

Bu kısa kod sizin için çalışacaktır. Bu ne için sadece iyi çalışması gerekir

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

} 

:

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

Güzel kod, ama tam olarak aradığım şey değil. İlk öğeyi seçmek istemiyorum. Sadece ilk maddeye geçmek istiyorum. Yani spinner açtığınızda, ilk öğeyi göreceksiniz ilk – vandzi

+0

Evet ama ilk öğeyi göstermek için ... bulduğum tek yol :) – MKJParekh

+0

Yapmam gereken sihrin ne olduğunu bilmiyorum ama bu işe yarıyor Android gmail uygulamasında yol. Navigasyonda ekranda görülebilen daha fazla öğe varsa (ör. Yatay modda), her açtığınızda, ilk önce size en üstteki öğeyi gösterecektir – vandzi