Я обнаружил, что старый выбор хранится в переменной с именем mOldSelectedPosition в иерархии счетчика.Spinner использует это значение, чтобы проверить, выбран ли один и тот же элемент или нет, и если он совпадает, он игнорирует.Если мы не хотим игнорировать это, то, что я сделал, это какой-то грязный код, использующий отражение.
package com.aradiom.amc.nativecomponents;
import java.lang.reflect.Field;
import android.content.Context;
import android.util.Log;
import android.widget.Spinner;
public class SpinnerTrigger extends Spinner {
public SpinnerTrigger(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public void setSelection(int position, boolean animate) {
ignoreOldSelectionByReflection();
super.setSelection(position, animate);
}
private void ignoreOldSelectionByReflection() {
try {
Class<?> c = this.getClass().getSuperclass().getSuperclass().getSuperclass();
Field reqField = c.getDeclaredField("mOldSelectedPosition");
reqField.setAccessible(true);
reqField.setInt(this, -1);
} catch (Exception e) {
Log.d("Exception Private", "ex", e);
// TODO: handle exception
}
}
@Override
public void setSelection(int position) {
ignoreOldSelectionByReflection();
super.setSelection(position);
}
}
Этот класс всегда делает недействительным значение oldselection, так что каждый раз при срабатывании события click срабатываетЭто не может быть идеальным решением.Используйте с осторожностью.:)