近期做项目的时候遇到这么一个问题,从服务端获取数据后绑定到Spinner中,点击Sipnner后可以在列表中看到数据(如图),但是无法选中,一番百谷之后发现有人遇到了跟我一样的问题,http://zhidao.baidu.com/question/983506242874276619.html
解决方案一:软件启动后我们会发现Spinner的默认值为空项,点击下拉后再点击选项会无法选中,我们大多是用ArrayList做为Spinner的数据源,此时只需在加载网络数据之前为ArrayList添加一项即可(如第一项为:请选择,如图),具体可以参考下代码: 解决前: [Java] 纯文本查看 复制代码 //list.add("请选择");
FinalHttp fh = new FinalHttp();
fh.get("http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getRegionProvince?", new AjaxCallBack()
{
@Override
public void onSuccess(String t)
{
super.onSuccess(t);
XMLHelper.getResult("string", t, new CallBack()
{
@Override
public void getResult(String result)
{
list.add(result);
}
});
}
});
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
解决后: [Java] 纯文本查看 复制代码 list.add("请选择");
FinalHttp fh = new FinalHttp();
fh.get("http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getRegionProvince?", new AjaxCallBack()
{
@Override
public void onSuccess(String t)
{
super.onSuccess(t);
XMLHelper.getResult("string", t, new CallBack()
{
@Override
public void getResult(String result)
{
list.add(result);
}
});
}
});
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
如果不想添加一项,则请看方案二。 解决方案二:数据源加载成功,却无法选中,由于数据源是异步加载,我猜测问题是出在为Spinner设置Adapter时,所以将设置Adapter写在完全加载完数据之后,试了一下,完美解决。
附上修改后代码 [Java] 纯文本查看 复制代码 FinalHttp fh = new FinalHttp();
fh.get("http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getRegionProvince?", new AjaxCallBack()
{
@Override
public void onSuccess(String t)
{
super.onSuccess(t);
XMLHelper.getResult("string", t, new CallBack()
{
@Override
public void getResult(String result)
{
list.add(result);
}
});
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
}
});
|