前言
為spinner适配完資料後需要設定其預設選項,但是發現直接setselection(int position)有時候不管用,打開選項又發現已經選中了,但是顯示出來的選項又始終預設第一個,本文為文章1的中文簡單譯本。
文章
聲明
歡迎轉載,但請保留文章原始出處:)
部落格園:http://www.cnblogs.com
農民伯伯: http://www.cnblogs.com/over140/
正文
問題很奇怪,此外還發現适配完資料後會預設選中第一個,并且這個預設選中第一個的操作并不是馬上執行的,而是一段時候後再執行,并觸發onitemselectedlistener事件。下面直奔主題:
舊代碼:
spinner.setadapter(adapter);
spinner.setselection(2);
新代碼:
spinner.setselection(2,true);
在來看setselection有兩個參數的函數重載的說明:
setselection(int position, boolean animate)
英文:jump directly to a specific item in the adapter data.
中文:直接跳到資料擴充卡中指定項。
以下是兩個函數的源代碼:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
/**
* 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();
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
結束
看起來像是專門準備了一個函數在資料适配(填充)完後設定預設值的,可惜api文檔還沒有翻譯到這裡,不然少走這個彎路了 :)
轉載:http://www.cnblogs.com/over140/archive/2010/09/25/1834469.html