2012-09-21 22 views
16

私はカーソルアダプタを備えたドロップダウンスピナーを使用します。たとえば、1〜100個のアイテムが含まれます。 アイテム50が選択される。アイテムが選択される。次回、スピナーを開くと最初に目に見える行がアイテム50になります。スピナーを開くと、最初のアイテムにフォーカスします。最初に表示されるアイテムはアイテム1になりますか?スピナー - 最初の項目に焦点を合わせる

リスト内の自動スクロールのように、最初に表示されるドロップダウンの項目は1番目であり、選択されていない項目です。

答えて

31

あなたは、値のリストを表示/それを拡張し、セットアップを担当する2つのメソッドをオーバーライドすることにより、Spinnerはあなたがやりたいことができますあなたがしたい。

+2

偉大な答え!ありがとうございました! – vandzi

+1

私はこのようなものを探していました... 3年後、それはまだ良い情報です!ありがとう。 – BinaryShrub

+0

すごいよ!どうもありがとうございます! – sonnv1368

2

次のような最初の項目にスピナーの選択を設定することができます。

yourspinner.setSelection(0); 

あなたはONSTART()メソッドでは、この操作が必要になります。

+4

この最初の項目を選択します。私は最初の項目を選択したくありません。スピナーで最初の項目までスクロールするだけで、ドロップダウンリストに最初の項目が表示されます。 – vandzi

1

この短いコードは、あなたのために作業を行います。それは何のためにうまく動作するはず

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

いいコードですが、私が探しているものではありません。私は最初の項目を選択したくありません。私は最初の項目までスクロールしたい。あなたがスピナーを開くと、最初のアイテムが表示されます。 – vandzi

+0

はい、最初のアイテムを表示します。私が見つけた唯一の方法はあります:) – MKJParekh

+0

私は何をする必要があるのか​​分かりませんが、アンドロイドGmailアプリでナビゲーション中に、スピナーを開くたびにスクリーン上に表示されるアイテム(たとえば、横モード)がある場合は、最初のアイテムが表示されます。 – vandzi

関連する問題