今天调试spinner的时候碰到一个奇怪的现象,代码如下所示:
adapter_app
=
new
ArrayAdapter<String>(
this,android.R.layout.
simple_spinner_item);
adapter_app.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
for
(int
i = 0; i<
Value_app.length; i++) {
adapter_app.add(Value_app[i]);
}
spinner_app.setAdapter(adapter_app);
spinner_app
.setSelection(item_app);
spinner_app.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?>arg0, View arg1,
int arg2, long arg3){
// TODO Auto-generated methodstub
screen_app = adapter_app.getItem(arg2);
}
......
});
感觉红色那行明明意思就是让spinner选中位置为item_app的选项吗。但是每次打开窗口,不管你前面选中并存储的是哪个项,显示选中的却始终是第一项(位置为0的那项)。
调试了半天才知道,原来每次调用spinner_app.setAdapter(adapter_app),系统就会自动调用一次onItemSelected(..., 0,...),也就是说,让第一项选中。
查了网上的解决办法:
(1)
spinner.setAdapter(adapter); //系统就会自动调用一次onItemSelected(..., 0,...)
spinner.setSelection(1,true); //spinner会重新layout 为true 不会调用onItemSelected()
(2) 推荐
spinner.setAdapter(adapter);系统就会自动调用一次onItemSelected(..., 0,...)
spinner.setSelection(1);又条用一次onItemSelected(你设置选中的项) 如 1
用方法一试的结果是,onItemSelected不会被调用,但是结果显示项是正确的,可能控件里自己就直接设置了。
用方法二的话,onItemSelected(..., 1, ...)会被调用两次,结果也是正确的。