Androidのspinnerで同じ項目を選択したときにonItemSelectedが呼び出されない件

なんか仕様で呼び出されない

解決方法はカスタム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が流れます

 

↓弊社で開発、販売しているソフトウェアです↓

MediMonitor無料ダウンロード  

「Androidのspinnerで同じ項目を選択したときにonItemSelectedが呼び出されない件」への1件のフィードバック

  1. onItemSelectedで同じ項目を選択しても反応しないから、onNothingSelectedが呼ばれると思い込んでハマっていました!
    ありがとうございます。
    (onNothingSelectedがSpinner以外をタップしても呼ばれないので、どのタイミングで呼ばれるか謎のままですが。)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です