如何在 Android 中为微调器捕获 onClick 事件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10213015/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to capture onClick event in Android for a spinner
提问by tacos_tacos_tacos
I want to capture the onClick event when the user selects a spinner value.
我想在用户选择微调器值时捕获 onClick 事件。
I've tried implementing OnClickListener
and using the following code:
我已经尝试实现OnClickListener
和使用以下代码:
@Override
public void onClick(final View view) {
if (view == countrySpinner) {
Toast.makeText(this, "Override OK!", 3);
}
}
And binding with:
并绑定:
countrySpinner.setOnClickListener(this);
This compiles, but I get a RuntimeException
advising me to use OnItemClickListener
rather than OnClickListener
for an AdapterView
.
这将编译,但我得到一个RuntimeException
建议我用OnItemClickListener
,而不是OnClickListener
一个AdapterView
。
How can I capture that onClick event?
如何捕获该 onClick 事件?
回答by ValayPatel
Instead of setting the spinner's OnClickListener,try setting OnTouchListener and OnKeyListener.
不要设置微调器的 OnClickListener,而是尝试设置 OnTouchListener 和 OnKeyListener。
spinner.setOnTouchListener(spinnerOnTouch);
spinner.setOnKeyListener(spinnerOnKey);
and the listeners:
和听众:
private View.OnTouchListener spinnerOnTouch = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
//Your code
}
return false;
}
};
private static View.OnKeyListener spinnerOnKey = new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
//your code
return true;
} else {
return false;
}
}
};
回答by Eric Leschinski
Don't treat a spinner like a button, buttons have onClick events. Spinners have onItemSelected events.
不要将微调器视为按钮,按钮具有 onClick 事件。Spinner 具有 onItemSelected 事件。
You should be capturing the Spinner's onItemSelected event like this:
您应该像这样捕获 Spinner 的 onItemSelected 事件:
import android.widget.AdapterView;
Spinner productname_spinner =(Spinner) findViewById(R.id.your_spinner);
productname_spinner.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
Object item = parent.getItemAtPosition(pos);
System.out.println(item.toString()); //prints the text in spinner item.
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
In Kotlin, similar to the following:
在 Kotlin 中,类似于以下内容:
mySpinner.onItemSelectedListener = object: OnItemSelectedListener {
override fun onNothingSelected(parent: AdapterView<*>?) {
// Do nothing
}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
val selection = parent?.getItemAtPosition(position)
viewModel.updateSelection(selection as String)
}
}
回答by Pramesh Bhalala
I've tried implementing OnItemSelectedListener
to get Selected Spinner Value , using the following code:
我尝试OnItemSelectedListener
使用以下代码实现获取 Selected Spinner Value :
String selectAreaNameString;
AreaSpinner.setOnItemSelectedListener(AreaSpinnerSelected = new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
Object item = parent.getItemAtPosition(pos);
selectAreaNameString = item.toString();
});