なんか仕様で呼び出されない
解決方法はカスタムspinnerを作る事!
package com.test; import android.content.Context; import android.util.AttributeSet; import android.widget.Spinner; public class CustomSpinner extends Spinner { public CustomSpinner(Context context) { super(context); } public CustomSpinner(Context context, AttributeSet attrs) { super(context, attrs); } public CustomSpinner(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void setSelection(int position, boolean animate) { boolean sameSelected = position == getSelectedItemPosition(); super.setSelection(position, animate); if (sameSelected) { // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId()); } } @Override public void setSelection(int position) { boolean sameSelected = position == getSelectedItemPosition(); super.setSelection(position); if (sameSelected) { // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId()); } } }
のCustomSpinnerクラスを作成
MainActivityで
CustomSpinner customSpinner;
を作って(インポートしてね!)
XMLは
<com.test.CustomSpinner android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/customSpinner" android:layout_weight="1" />
で
customSpinner= (CustomSpinner) layout.findViewById(R.id.customSpinner);
ってすれば普段通りの
customSpinner.setAdapter(adapter); customSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, final int position, long id) { if(powarOn) { powarOn = false ; return ; } //動作すること } @Override public void onNothingSelected(AdapterView<?> arg0) { } });
で同じもの選択されたときにonItemSelectedが流れます
onItemSelectedで同じ項目を選択しても反応しないから、onNothingSelectedが呼ばれると思い込んでハマっていました!
ありがとうございます。
(onNothingSelectedがSpinner以外をタップしても呼ばれないので、どのタイミングで呼ばれるか謎のままですが。)