Android Spinner綁定默認項

Android Spinner只提供通過position綁定默認項的方法,但是實際上是通過text或者內部隱藏的value來綁定數據源,這篇文章利用了一個KeyValuePair的實體類BuilderSpinnerDataUtil來實現通過value或者text來綁定Spinner默認選中項,下面上代碼.

1.KeyValuePair:綁定數據源的實體類,Spinner一般只需要一個Value和一個text綁定即可.

/**
 * 
 * Key Value對應類,用於Spinner數據綁定
 *
 */
public class KeyValuePair {
	private String value = "";  
    private String text = "";  
  
    public KeyValuePair(String value, String text) {  
        this.value = value;  
        this.text = text;  
    }  
  
    @Override  
    public String toString() {   
        return text;  
    }  
    public String getValue() {  
        return value;  
    }  
    public String getText() {  
        return text;  
    }  
}
2.BuilderSpinnerDataUtil:Spinner綁定的工具類,提供通過value和text綁定默認項的方法

import android.widget.Spinner;
import android.widget.SpinnerAdapter;

public class BuilderSpinnerDataUtil {

	/**
	 * 根據值, 設置spinner默認選中:
	 * @param spinner
	 * @param value
	 */
	public void setSpinnerItemSelectedByValue(Spinner spinner,int value){
	    SpinnerAdapter apsAdapter= spinner.getAdapter(); //得到SpinnerAdapter對象
	    if(apsAdapter!=null){
	        int k= apsAdapter.getCount();
	        for(int i=0;i<k;i++){
	            if(value==Integer.parseInt(((KeyValuePair)apsAdapter.getItem(i)).getValue())){
	               spinner.setSelection(i,true);// 默認選中項
	               break;
	            }
	        }
	    }
	 }

	/**
	 * 根據值, 設置spinner默認選中:
	 * @param spinner
	 * @param value
	 */
	public void setSpinnerItemSelectedByValue(Spinner spinner,String value){
	    SpinnerAdapter apsAdapter= spinner.getAdapter(); //得到SpinnerAdapter對象
	    if(apsAdapter!=null){
	        int k= apsAdapter.getCount();
	        for(int i=0;i<k;i++){
	            if(value.equals(apsAdapter.getItem(i))){
	               spinner.setSelection(i,true);// 默認選中項
	               break;
	            }
	        }
	    }
	 }
}
總結,在這裏也沒有什麼難點,只是有一個spinner.setSelection(i,true);這個方法或許不清楚,在這裏以我的簡介稍微介紹一下.

setSelection(position,flag);  第一個參數爲索引值(就不介紹了),第二個參數:flag爲true時,會立即layout,就相當於用戶直接單擊第position項,當在setItemSelectListener之前調用setSelection則不會觸發OnItemSelectListener(但是依舊會綁定數據,只是不會觸發那個方法而已);flag設置爲false時,只是設置下一次選中的位置setNextSelectedPositionInt(position),然後請求layout,而不會立即執行requestLayout,只是一個schedule(安排),但是重新裝載數據然後layout時可能丟失了某些狀態,導致有時設置爲false時,不會綁定默認選中項。


發佈了32 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章