想请教各位大牛一个问题,这个问题困扰我很久,希望大家可以帮忙看看,欢迎大家讨论啊。。问题如下:
xml文件,就是两个控件 TextView1和mySpinner1
java文件中,有一个变量list,我用线程获取了数据并用Handler hand接收数据,然后成功赋值给list。之后,我把定义了spinner的adapter和setOnItemSelectedListener,加入list数据源,运行后可以看到虽然数据绑定成功,但是首项并未显示,而且点击并没有反应,到底是为什么啊啊啊其运行效果如下:
其java代码如下:
public class Test extends Activity{
private Spinner mySpinner1;private TextView tv;
private List<String> list = new ArrayList<String>(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.testxx); mySpinner1=(Spinner) findViewById(R.id.spinn);
tv=(TextView) findViewById(R.id.textView1);
getlist();
//tv.setText(list.get(1));这里异常,说list.size=0

final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
mySpinner1.setAdapter(adapter);
mySpinner1.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {//点击没有反应
public void onItemSelected(AdapterView<?> arg0, View arg1,
int position, long arg3) {
                     tv.setText(String.valueOf(position));
}
public void onNothingSelected(AdapterView<?> arg0) {
}
});
} private void getlist() {
Handler hand = new Handler() {
public void handleMessage(android.os.Message msg) {
super.handleMessage(msg);
try {
String Jstr = (((((String)msg.obj).replaceAll(", ", "\",\""))  .replaceAll("=", "\":\"")).replace("{", "{\""))  .replace("}", "\"}"); JSONObject Jobj=new JSONObject(Jstr);
list.add("请选择");
for(int i=1;i<Jobj.length()+1;i++){
list.add(Jobj.getString("tname"+i));//这里是正常的,确实正确赋值了

} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
ThreadPoolUtils.execute(new HttpPostThread(hand,
Config.SERVER_URL+Config.ACTION_Clubinfo,"viewAllt",null,null));
}
}

解决方案 »

  1.   

    两个方面检查一下,亲测有效。
    1、将spinner高度设为wrap_content,原因:可能是你引用的布局高度高于spinner,造成不展示,我的是这样2、在你引用的布局的跟布局位置写上:android:descendantFocusability="blocksDescendants",原因:spinner引用的根布局里的子布局获取了焦点,使得外面点击无法响应我今天刚好也遇到了这个问题,亲测有效,你试试
      

  2.   

    你这相当于异步请求数据然后更新,那么list一开始肯定是空的,只有当你获取到数据后才有值
      

  3.   

    getlist();
    //tv.setText(list.get(1));这里异常,说list.size=0如3L所说你的getlist();是异步的,你调用之后马上就会执行下一句,并不会等待getlist完成,所以必然size=0