5

我相信我可能在 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 中正常工作。那是……烦人。但我现在也许可以忍受它。我将保留这个开放的潜在方法来解决这个错误,但它在我看来就像一个真正的错误,我怀疑它可以被修复。

4

3 回答 3

2

以这种方式尝试。

        NumberPicker npicker = (NumberPicker) findViewById(R.id.diceCountPicker1);
        npicker.setMaxValue(100);
        npicker.setMinValue(0);

        npicker.setOnValueChangedListener(new OnValueChangeListener() {
            @Override
            public void onValueChange(NumberPicker picker, int oldVal,
                    int newVal) {
                // Conditions for Enable/Disable picker                 
                if (newVal == 0) {
                    picker.setEnabled(false);
                } else if (oldVal == 0) {
                    picker.setEnabled(true);
                }
            }
        });

它对我来说效果很好,并且根据附加条件启用/禁用它的行为正常。

谢谢。

于 2012-12-19T05:22:00.600 回答
2

好吧,在没有其他反馈的情况下,我将继续关闭它。这是我所知道的:

这似乎是 Jellybean 中引入的一个错误。我已经在模拟器中进行了测试,并且 UI 在 ICS 和更早版本中按预期工作。目前,我只是要处理这个问题,并尝试提交官方错误报告。

于 2012-12-22T05:52:37.547 回答
0

NumberPicker android:enabled="false"和 DatePicker xml 布局中的设置不会使我在 Android 4.0.4 设备上的控件变灰。setEnabled(false)但是,通过按预期方式以编程方式执行此操作。

于 2014-05-01T04:55:34.563 回答