2011-05-18 69 views
0

我閱讀了文檔,但我不太明白......參數「animate」是什麼?Android微調視圖:setSelection(int position)和setSelection(int position,boolean animate)之間的區別?

唯一的事情,我注意到:

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
{ 
    if (savedPosition != -1) 
    { 
     ((Spinner) parent).setSelection(savedPosition); 
     savedPosition = -1; 
     return; 
    } 

    //... 
} 

...正常工作與 「爲setSelection」,但運行到無限循環/的StackOverflowError爲setSelection(savedPosition,真);

我真的很好奇爲什麼會這樣?

親切的問候, 水母

+0

看起來像觸發動畫會觸發onItemSelected事件,它是不可思議的,它不會觸發沒有動畫.. – BFil 2011-05-18 13:08:20

+0

我很確定,即使沒有動畫觸發它,因爲我到達// ... onItemSelected之後的代碼首先被調用。 (意思是,它被稱爲兩次。)有可能,有一些時間延遲,而動畫「savedPosition」從未設置爲-1? – jellyfish 2011-05-18 13:13:43

+0

我不知道,你爲什麼不在setSelection()之前放置「savedPosition = -1」? – BFil 2011-05-18 13:23:55

回答

1

那麼它應該做的事情,顧名思義。從當前位置動畫到所需位置。當您僅使用setSelection時,如果您試圖確保用戶看到更改(對更改的通知進行排序),並且看起來更平滑,則更改更合適。至少這就是我使用它的原因。至於動畫我從來沒有任何問題。

爲什麼你使用savedPosition而不是位置進行選擇?也許這就是導致循環的原因。我的建議是試着用位置來做,看看它是否失敗。你的代碼有點奇怪..

你作爲評論建議你再次調用該方法出於某種原因,因爲我相信動畫setSelection會在選擇實際設置時執行此操作。

+0

該代碼看起來很奇怪,因爲我遺漏了很多。 :-) 但是,我交換了setSelection和savedPosition = -1行(將savedPosition放入某個局部變量),它也起作用。我會保持這種方式,因爲我不能確定何時啓動新的「OnItemSelect」。 - 無論如何,如果我希望用戶*不*看到更改,我應該使用「setSelection(int)」或「setSelection(int,false」)? – jellyfish 2011-05-18 13:25:53

+1

以及使用setSelection(int)。它是一種古老而穩定的方法(不太可能出現一些愚蠢的碎片問題,無論如何不應該發生,但誰知道)。當他們兩個服務於同一個purpouse時,我會使用setSelection(int)。 – DArkO 2011-05-18 13:51:49

+0

好的,謝謝。:-) – jellyfish 2011-05-18 14:08:00

相關問題