如何在Android中捕获针对微调器的onClick事件

tac*_*cos 10 android android-widget android-spinner

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

我已经尝试实现OnClickListener并使用以下代码:

@Override
public void onClick(final View view) {
  if (view == countrySpinner) {
    Toast.makeText(this, "Override OK!", 3);
  }
}
Run Code Online (Sandbox Code Playgroud)

和绑定:

countrySpinner.setOnClickListener(this);
Run Code Online (Sandbox Code Playgroud)

这编译,但我得到RuntimeException建议我使用OnItemClickListener而不是OnClickListener一个AdapterView.

如何捕获onClick事件?

Val*_*tel 19

不要设置微调器的OnClickListener,而是尝试设置OnTouchListener和OnKeyListener.

spinner.setOnTouchListener(spinnerOnTouch);
spinner.setOnKeyListener(spinnerOnKey);
Run Code Online (Sandbox Code Playgroud)

和听众:

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;
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

  • 通过消耗所有触摸和键事件,您的代码将使"Spinner"完全无法使用.如果这是目标,OP应该只使用`Button`. (3认同)
  • 我怀疑这会有所帮助.如果您希望超类具有其正常行为,则链接到超类. (2认同)
  • @CommonsWare:这正是我想要的。“按钮”_看起来_不像一个旋转器。 (2认同)

Eri*_*ski 15

不要像按钮那样对待微调器,按钮有onClick事件.旋转器具有onItemSelected事件.

您应该捕获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) {
    }
});
Run Code Online (Sandbox Code Playgroud)