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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章