当所选项目发生变化时,如何为微调器设置事件侦听器?
基本上我想做的是类似这样的事情:
spinner1.onSelectionChange = handleSelectionChange;
void handleSelectionChange(Object sender){
//handle event
}
当所选项目发生变化时,如何为微调器设置事件侦听器?
基本上我想做的是类似这样的事情:
spinner1.onSelectionChange = handleSelectionChange;
void handleSelectionChange(Object sender){
//handle event
}
当前回答
我知道这个问题解决了很长时间,但我有一个“请选择”字符串在我的字符串数组的顶部。然后,当您编写侦听器时
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语句以拥有不同的响应或操作。
其他回答
spinner.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
//add some code here
}
);
我认为最好的方法是让flagitemselected = 0;在onCreate()。在itemselected event上增加标志,即flagitemselected++;然后检查
if(flagitemselected!=1)
{
// do your work here
}
我想这会有帮助。
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应该在对象范围内,这样才能工作!
前面的一些答案是不正确的。它们适用于其他小部件和视图,但Spinner小部件的文档明确指出:
旋转器不支持项目单击 事件。调用此方法将引发 一个例外。
最好使用OnItemSelectedListener()代替:
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// your code here
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
这对我很有用。
注意,onItemSelected方法也被调用时,视图正在构建,所以你可以考虑把它放在onCreate()方法调用。
默认情况下,您将获得旋转器数组的第一项
value = spinner.getSelectedItem().toString();
无论何时你在旋转器中选择值,它都会给你选择的值
如果你想要选定项目的位置,然后这样做
pos = spinner.getSelectedItemPosition();
以上两个答案均为不应用监听器的情况