想请教各位大牛一个问题,这个问题困扰我很久,希望大家可以帮忙看看,欢迎大家讨论啊。。问题如下:
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));
}
}
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));
}
}
解决方案 »
- listview 动态构造控件
- andorid 如何使自己的软件随着手机启动而启动
- 简单解析XML
- Android的笔试题
- 有没有开发过openfire+android 的即时通讯的应用
- android启动问题
- android 手势滑动怎么拦截
- 高分求解Android SDK 升级问题
- 怎么播放flv文件——顶贴给分
- ionic4 调试工具 devapp 在安卓上怎么安装呢?ionic4 调试工具 devapp 在安卓上怎么安装呢?
- serversocket 如何绑定ipv4端口?
- Rxjava取消了AndroidSchedulers.mainThread()吗,为什么提示我没有这个方法呢,我用的Rxjava1.1.3版本
1、将spinner高度设为wrap_content,原因:可能是你引用的布局高度高于spinner,造成不展示,我的是这样2、在你引用的布局的跟布局位置写上:android:descendantFocusability="blocksDescendants",原因:spinner引用的根布局里的子布局获取了焦点,使得外面点击无法响应我今天刚好也遇到了这个问题,亲测有效,你试试
//tv.setText(list.get(1));这里异常,说list.size=0如3L所说你的getlist();是异步的,你调用之后马上就会执行下一句,并不会等待getlist完成,所以必然size=0