如何在 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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 02:53:47  来源:igfitidea点击:

How to capture onClick event in Android for a spinner

androidandroid-widgetandroid-spinner

提问by tacos_tacos_tacos

I want to capture the onClick event when the user selects a spinner value.

我想在用户选择微调器值时捕获 onClick 事件。

I've tried implementing OnClickListenerand 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 RuntimeExceptionadvising me to use OnItemClickListenerrather than OnClickListenerfor 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 OnItemSelectedListenerto 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();
});