2012-01-28 86 views
11

我有一個微調器,其中填充了CursorAdapter。現在創建微調器(動態)時,我想設置一個不同於0的默認選項(0是CursorAdapter列表中的第一項)Android Spinner.setSelection()不起作用

所以我得到了一個setter,創建。但是由於某種原因,無論我通過那個setter,我總是將其傳遞給Spinner的OnItemSelectedListener中的onItemSelected()方法。

但是,如果我只是等到第一次初始選擇發生並再次運行我的setter,一切正常。因此,使之更加這裏清楚是我在調試器中看到:

  • 對象(微調)創建
  • 微調偵聽器附加
  • 二傳手運行時,一個數字,可以說4(微調的方式包含超過4個選項)傳遞給setSelection()方法
  • 等一會
  • NOW onItemSelected()運行的第一次,但考慮到該方法的位置爲0!
  • 等一會更多
  • 我們再次運行二傳手
  • 再次onItemSelected()運行,這時候,給出的排名位置是4,因爲它應該是!

現在,這是有線。似乎沒有可能設置該微調器,直到第一個初始選擇(始終爲0)運行。那麼爲什麼它是這樣的,我能做些什麼來設置初始選擇?

+1

您可以發佈設置Spinner時使用的代碼嗎?這聽起來像可能是因爲你有一些錯誤的代碼 – 2012-01-28 20:09:52

+0

這個答案(在另一個SO問題)爲我工作:http://stackoverflow.com/a/17370964/1617737 – 2017-02-02 22:42:24

回答

30

嘗試Spinner#setSelection (int position, boolean animate) with animate = false。我記得有一段時間,我遇到過類似的問題,而且這個伎倆。除了來自動畫部分的差異之外,內部實現似乎不同。

+5

工作就像一個魅力。 – masi 2012-01-28 21:09:28

+0

工作對我來說..但不知道爲什麼它的工作時,動畫成爲真.. – 2017-10-25 09:11:02

1

如果你知道默認的選擇微調的項目,它可以寫成如下:當您更改微調項目選擇

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

onItemselectedlistener被調用。