当所选项目发生变化时,如何为微调器设置事件侦听器?
基本上我想做的是类似这样的事情:
spinner1.onSelectionChange = handleSelectionChange;
void handleSelectionChange(Object sender){
//handle event
}
当所选项目发生变化时,如何为微调器设置事件侦听器?
基本上我想做的是类似这样的事情:
spinner1.onSelectionChange = handleSelectionChange;
void handleSelectionChange(Object sender){
//handle event
}
当前回答
我认为最好的方法是让flagitemselected = 0;在onCreate()。在itemselected event上增加标志,即flagitemselected++;然后检查
if(flagitemselected!=1)
{
// do your work here
}
我想这会有帮助。
其他回答
Spinner spnLocale = (Spinner)findViewById(R.id.spnLocale);
spnLocale.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
// Your code here
}
public void onNothingSelected(AdapterView<?> adapterView) {
return;
}
});
注意:记住一件事。
OnItemSelectedListener事件将执行两次:
旋转器初始化 手动选择的用户
试着用标志变量来区分这两者。
spinner1.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
//add some code here
}
);
我发现的一个技巧是把你的setOnItemSelectedListeners放在onWindowFocusChanged而不是onCreate中。我还没有发现这样做有任何副作用。基本上,在窗口绘制之后设置侦听器。我不确定onWindowFocusChanged运行的频率,但如果你发现它运行得太频繁,创建一个锁变量是很容易的。
我认为Android可能会使用基于消息的处理系统,如果你把它都放在onCreate中,你可能会遇到旋转器在它被绘制后被填充的情况。你的监听器会在你设置项目位置后启动。当然,这是一个有根据的猜测,但请随意纠正我。
https://stackoverflow.com/q/1714426/811625
你可以通过一个简单的检查来避免OnItemSelectedListener()被调用:将当前的选择索引存储在一个整数变量中,并在做任何事情之前在onItemSelected(..)中进行检查。
E.g:
Spinner spnLocale;
spnLocale = (Spinner)findViewById(R.id.spnLocale);
int iCurrentSelection = spnLocale.getSelectedItemPosition();
spnLocale.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
if (iCurrentSelection != i){
// Your code here
}
iCurrentSelection = i;
}
public void onNothingSelected(AdapterView<?> adapterView) {
return;
}
});
当然,iCurrentSelection应该在对象范围内,这样才能工作!
我知道这个问题解决了很长时间,但我有一个“请选择”字符串在我的字符串数组的顶部。然后,当您编写侦听器时
yourspinner.onItemSelectedListener = object : OnItemSelectedListener {
override fun onItemSelected(adapterView: AdapterView<*>?, view: View, i: Int, l: Long) {
yourvalue = yourspinner.getSelectedItem().toString()
when(yourvalue){
"Please Select" -> // DO nothing
else -> // Do something
}
}
override fun onNothingSelected(adapterView: AdapterView<*>?) {
return
}
}
当然,您可以扩展when语句以拥有不同的响应或操作。