ユーザーがスピナー値を選択したときにonClickイベントをキャプチャしたいと思います。
OnClickListener
を実装し、次のコードを使用してみました。
@Override
public void onClick(final View view) {
if (view == countrySpinner) {
Toast.makeText(this, "Override OK!", 3);
}
}
そしてとの結合:
countrySpinner.setOnClickListener(this);
これはコンパイルされますが、RuntimeException
にOnItemClickListener
ではなくOnClickListener
を使用するようにアドバイスするAdapterView
が表示されます。
そのonClickイベントをキャプチャするにはどうすればよいですか?
スピナーのOnClickListenerを設定する代わりに、OnTouchListenerとOnKeyListenerを設定してみてください。
spinner.setOnTouchListener(spinnerOnTouch);
spinner.setOnKeyListener(spinnerOnKey);
とリスナー:
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;
}
}
};
スピナーをボタンのように扱わないでください。ボタンには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) {
}
});
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)
}
}
次のコードを使用して、OnItemSelectedListener
を実装してSelectedSpinnerValueを取得しようとしました。
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();
});