Spinner : onItemSelected not called when selected item remains the same

后端 未结 10 689
不思量自难忘°
不思量自难忘° 2020-11-28 07:12

I have a OnItemSelectedListener for my Spinner, but it is not called when the selected item is the same as the previous one. Apparently the O

10条回答
  •  庸人自扰
    2020-11-28 08:08

    Here is a better implementation -

    Custom Spinner Class -

    import android.content.Context;
    import android.util.AttributeSet;
    import androidx.appcompat.widget.AppCompatSpinner;
    
    public class CSpinner extends AppCompatSpinner {
    
        private int lastPosition = 0;
    
        public CSpinner(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        @Override
        public void setSelection(int position) {
            super.setSelection(position);
            boolean sameSelected = lastPosition == getSelectedItemPosition();
            OnItemSelectedListener onItemSelectedListener = getOnItemSelectedListener();
            if (sameSelected && onItemSelectedListener != null) {
                onItemSelectedListener.onItemSelected(this, getSelectedView(), position, getSelectedItemId());
            }
            lastPosition = position;
        }
    }
    

    Setting Listener -

    spn.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView parent, View view, int position, long id) {
                Log.d("onItemSelected", String.valueOf(position));
            }
    
            @Override
            public void onNothingSelected(AdapterView parent) {
                
            }
        });
    

提交回复
热议问题