2013-06-21 98 views
0

onCreate()我使用一個setOnItemSelectedListener()微調。然後在onResume()我在同一個微調器上調用setSelection()。會發生什麼是監聽器被調用,但事件並不按我預期的順序發生。如果我的代碼如下所示:如何等待對象偵聽器完成處理事件?

sp1.setOnItemSelectedListener(... 
    @Override 
    public void onItemSelected(){... 

     Log.e("marker", "stage 2"); 
    ...} 
...}); 

Log.e("marker", "stage 1"); 
sp1.setSelection(1, true); 
Log.e("marker", "stage 3"); 

在logcat中的事件發生順序如下:階段1,stage3的,然後第二階段。很顯然,我希望它是階段1, stage2,然後stage3。我如何實現這一目標?

+0

爲什麼這很重要?如果你真的需要這個,那麼你可以在調用setSelection()之前移除監聽器,然後直接調用onItemSelected()(這是一個醜陋但簡單的解決方案) –

+0

它與相關的spinners(我其實有5個)在包含活動被銷燬後如何重新創建其狀態(選擇了哪些項目)。所以它就像這樣,sp2依賴於sp1,sp3依賴於sp2,依此類推。我得到一個indexOutOfBoundsExeception,因爲當我調用sp2.setSelection()時,sp2的適配器尚未更新(應該是在sp1的onItemSelected中處理的)。 – user1923613

+0

嗨,@MichaelButscher。你介意把它寫成答案(所以我可以把它作爲正確的答案/ sol'n)。我自己解決了這個問題,我的代碼就像你說的那樣結束了。它看起來很可怕,主要是因爲依賴關係,if-else語句太多。 我可以在這裏問一個相關的問題嗎?有沒有一種標準的方式來實現依賴spinners而不必使用如此多的if-else語句?我認爲這是一個相當普遍的情況。就像用戶需要輸入他/她的地址一樣。你將有一個STATE-Spinner,CITY/TOWN-spinner和STREET-Spinner,它們將被相應填充。 – user1923613

回答

0

如果你真的需要這個,那麼你可以在調用setSelection()之前刪除的監聽器和後直接調用onItemSelected()(這是一個醜陋的,但簡單的解決方案)