Search code examples
androidandroid-widgetandroid-spinner

How to capture onClick event in Android for a spinner


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

I've tried implementing OnClickListener and using the following code:

@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.

How can I capture that onClick event?


Solution

  • Instead of setting the spinner's OnClickListener,try setting OnTouchListener and 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;
            }
        }
    };