前言
為Spinner適配完資料後需要設定其預設選項,但是發現直接setSelection(int position)有時候不管用,開啟選項又發現已經選中了,但是顯示出來的選項又始終預設第一個,本文為文章1的中文簡單譯本。
文章
1. Using spinner.setSelection & finding the spinner doesn't show the selected item when closed?
聲明
歡迎轉載,但請保留文章原始出處:)
部落格園:http://www.cnblogs.com
農民伯伯: http://www.cnblogs.com/over140/
本文
問題很奇怪,此外還發現適配完資料後會預設選中第一個,並且這個預設選中第一個的操作並不是馬上執行的,而是一段時候後再執行,並觸發OnItemSelectedListener事件。下面直奔主題:
舊代碼:
spinner.setAdapter(adapter);
spinner.setSelection(2);
新代碼:
spinner.setAdapter(adapter);
spinner.setSelection(2,true);
在來看setSelection有兩個參數的函數重載的說明:
setSelection(int position, boolean animate)
英文:Jump directly to a specific item in the adapter data.
中文:直接跳到資料配接器中指定項。
以下是兩個函數的原始碼:
/**
* Jump directly to a specific item in the adapter data.
*/
public void setSelection(int position, boolean animate) {
// Animate only if requested position is already on screen somewhere
boolean shouldAnimate = animate && mFirstPosition <= position &&
position <= mFirstPosition + getChildCount() - 1;
setSelectionInt(position, shouldAnimate);
}
@Override
public void setSelection(int position) {
setNextSelectedPositionInt(position);
requestLayout();
invalidate();
}
結束
看起來像是專門準備了一個函數在資料適配(填充)完後設定預設值的,可惜API文檔還沒有翻譯到這裡,不然少走這個彎路了