我相信我可能在 Android UI 中发现了一个错误,但我想确保我没有做错什么。这是我正在运行的导致问题的代码的简化版本。此侦听器设置在我的 UI 中的特定 NumberPicker 上,它正确地禁用/启用了一些东西,但是如果用户更改了它禁用的其他 NumberPicker 之一的值,它的行为会有点奇怪。
它仍然可以正确禁用输入,但无法将值变灰,使其看起来仍然处于启用状态。这是故意的吗?难道我做错了什么?
NumberPicker.OnValueChangeListener diceChangeListener = new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
View parent = (View) picker.getParent();
if (newVal == 0) {
((NumberPicker) parent.findViewById(R.id.diceCountPicker1)).setEnabled(false);
} else if (oldVal == 0) {
((NumberPicker) parent.findViewById(R.id.diceCountPicker1)).setEnabled(true);
}
}
};
让我知道是否有更好的方法可以做到这一点,或者这是否是一个合法的错误。如果它是一个错误,有没有办法解决它?
编辑:这是 diceCountPicker1 在 XML 中的定义:
<NumberPicker
android:id="@+id/diceCountPicker1"
android:layout_width="48dp"
android:layout_height="128dp"
android:descendantFocusability="blocksDescendants"
/>
编辑2:
我已经在模拟器中对此进行了测试,并确认在 Jellybean (4.1) 之前该问题不存在。它在 ICS 中正常工作。那是……烦人。但我现在也许可以忍受它。我将保留这个开放的潜在方法来解决这个错误,但它在我看来就像一个真正的错误,我怀疑它可以被修复。