Son*_*Ali 385 events android spinner android-spinner
如何在所选项目更改时为Spinner设置事件侦听器?
基本上我想要做的是类似于这样的事情:
spinner1.onSelectionChange = handleSelectionChange;
void handleSelectionChange(Object sender){
//handle event
}
Run Code Online (Sandbox Code Playgroud)
znq*_*znq 791
以前的一些答案是不正确的.它们适用于其他小部件和视图,但Spinner小部件的文档清楚地指出:
微调器不支持项目单击事件.调用此方法将引发异常.
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
}
});
Run Code Online (Sandbox Code Playgroud)
这适合我.
请注意,在构建视图时也会调用onItemSelected方法,因此您可以考虑将其放在onCreate()方法调用中.
San*_*osh 54
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;
}
});
Run Code Online (Sandbox Code Playgroud)
注意:记住一件事.
Spinner OnItemSelectedListener事件将执行两次:
尝试使用flag变量来区分这两者.
Dha*_*eem 17
您可以AdapterView.OnItemSelectedListener在Activity中实现类.
然后使用下面的内容 onCreate()
Spinner spin = (Spinner) findViewById(R.id.spinner);
spin.setOnItemSelectedListener(this);
Run Code Online (Sandbox Code Playgroud)
然后覆盖这两个方法:
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
selection.setText(items[position]);
}
public void onNothingSelected(AdapterView<?> parent) {
selection.setText("");
}
Run Code Online (Sandbox Code Playgroud)
Sam*_*ath 16
您可以通过简单检查来避免调用OnItemSelectedListener():将当前选择索引存储在整数变量中,并在执行任何操作之前检查onItemSelected(..).
例如:
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;
}
});
Run Code Online (Sandbox Code Playgroud)
因为iCurrentSelection应该在对象范围内工作!
找到您的微调名称并找到ID然后实现此方法.
spinnername.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
}
});
Run Code Online (Sandbox Code Playgroud)
您可以在onCreate或onStart中设置OnItemSelectedListener无关紧要-仍将在Activity创建或启动期间分别调用它。
因此我们可以在onCreate中设置它(而不是在onStart中!)。
只需添加一个标志就可以确定首次初始化:
private Spinner mSpinner;
private boolean mSpinnerInitialized;
Run Code Online (Sandbox Code Playgroud)
然后在onCreate(或onCreateView)中:
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
if (!mSpinnerInitialized) {
mSpinnerInitialized = true;
return;
}
// do stuff
}
public void onNothingSelected(AdapterView<?> adapterView) {
return;
}
});
Run Code Online (Sandbox Code Playgroud)
spinner1.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
//add some code here
}
);
Run Code Online (Sandbox Code Playgroud)
对于 kotlin,您可以使用:
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
}
override fun onNothingSelected(p0: AdapterView<*>?) {
}
}
Run Code Online (Sandbox Code Playgroud)
注意:对于onItemSelected方法的参数,我使用自定义变量名称