您的位置:首页 > 移动开发 > Android开发

Android Spinner绑定默认项

2016-10-20 16:30 1846 查看
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时,不会绑定默认选中项。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: