花墨 发表于 2015-3-14 10:19:56

解决Android Spinner网络获取数据后无法选中问题

    近期做项目的时候遇到这么一个问题,从服务端获取数据后绑定到Spinner中,点击Sipnner后可以在列表中看到数据(如图),但是无法选中,一番百谷之后发现有人遇到了跟我一样的问题,http://zhidao.baidu.com/question/983506242874276619.html



解决方案一:软件启动后我们会发现Spinner的默认值为空项,点击下拉后再点击选项会无法选中,我们大多是用ArrayList做为Spinner的数据源,此时只需在加载网络数据之前为ArrayList添加一项即可(如第一项为:请选择,如图),具体可以参考下代码:http://cnhuamo.u.qiniudn.com/wp-content/uploads/2015/03/1.gif?watermark/1/image/aHR0cDovL3d3dy5jbmh1YW1vLm5ldC93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8xMS9obS13YXRlcm1hcmsucG5n/dissolve/100/gravity/SouthEast/dx/10/dy/10解决前://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);解决后: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写在完全加载完数据之后,试了一下,完美解决。http://cnhuamo.u.qiniudn.com/wp-content/uploads/2015/03/2.gif?watermark/1/image/aHR0cDovL3d3dy5jbmh1YW1vLm5ldC93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8xMS9obS13YXRlcm1hcmsucG5n/dissolve/100/gravity/SouthEast/dx/10/dy/10
附上修改后代码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);
    }
});

sndncel 发表于 2015-3-14 12:14:45

支持原创作品。。。。。。。顶一下。。。。
页: [1]
查看完整版本: 解决Android Spinner网络获取数据后无法选中问题