繁星淼淼
我花了好几个小时试图找到解决这个问题的方法。我得出以下结论。我不确定它是否在所有情况下都有效,但它似乎对我有用。它只是Spinner类的扩展,该类检查选择内容并在选择内容设置为相同值时调用侦听器。import android.content.Context;import android.util.AttributeSet;import android.widget.Spinner;/** Spinner extension that calls onItemSelected even when the selection is the same as its previous value */public class NDSpinner extends Spinner { public NDSpinner(Context context) { super(context); } public NDSpinner(Context context, AttributeSet attrs) { super(context, attrs); } public NDSpinner(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()); } }}