2012-01-28 24 views
11

私はCursorAdapterが入力されたスピナーを持っています。 (動的に)スピンナーを作成するときに、デフォルトの選択を0とは異なる0に設定したいとします。Android Spinner.setSelection()が機能しません

作成した。しかし何らかの理由で、私がそのセッターで何を渡しても0はいつもスピーカーのOnItemSelectedListeneronItemSelected()メソッドに渡されます。

最初の最初の選択が行われるまで待ってからセッターを再実行すると、すべて正常に動作します。だから、ここでそれをより明確にするために、私は、デバッガで見るものである:、

  • オブジェクト(スピナー)
  • スピナーリスナーを作成している
  • セッターが実行されて取り付けられており、数(4を言うことができますスピナー)が4つの選択よりも方法の詳細が含まれていますがsetSelection()方法
  • NOW
  • BITをWAIT onItemSelected()に渡される最初の時間を実行しますが、そのメソッドに指定された位置が0です!
  • 再び我々はonItemSelected()再びセッター
  • を実行
  • もう少しWAITが実行され、それが可能になっていたとして、この時間は、指定された位置が4であります!

これは有線です。最初の最初の選択(常に0)が実行されるまで、そのスピンナーを設定することはできないようです。だから、なぜそれがそれであるのか、最初の選択をするために何ができるのでしょうか?

+1

Spinnerを設定する際に使用したコードを投稿してください。それはあなたが間違った順序でいくつかのコードを持っていることができるように聞こえます –

+0

この答えは(別のSOの質問で)私のために働いた:http://stackoverflow.com/a/17370964/1617737 –

答えて

30

Spinner#setSelection (int position, boolean animate)をanimate = falseで試してください。私はしばらく前に私は同様の問題を抱えていたことを覚えており、これはトリックでした。内部実装は、アニメーション部分からの違いとは別のものと思われます。

+5

は魅力的に働いた。 – masi

+0

私にも働きましたが、アニメートが真実になったときになぜそれが働いているのか分かりません。 –

1

あなたが選択したスピナー項目をデフォルト知っている場合は、次のように、それは書くことができます:あなたはスピナー項目選択を変更すると

Spinner sp = (Spinner) findViewById(R.id.spinner); 
sp.setSelection(0); // sets the first item 

onItemselectedlistenerが呼び出されます。

関連する問題