当禁用时,NumberPicker无法变灰

5
我认为我可能在Android UI中发现了一个错误,但我想确保我没有做错什么。这是我运行的代码的简化版本,导致了问题。此侦听器设置在我的UI中特定的NumberPicker上,它可以正确地禁用/启用一些内容,但如果用户已更改了它禁用的其他NumberPickers之一的值,则会表现出一些奇怪的行为。
它仍然可以正确地禁用输入,但它无法使输入变灰,使其看起来仍然处于启用状态。这是有意的吗?我做错了什么吗?
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);
        }
    }
};

如果有更好的方法来处理这个问题,请告诉我,或者如果这是一个真正的 bug,是否有一种解决方法?

编辑:以下是 XML 中 diceCountPicker1 的定义:

<NumberPicker
    android:id="@+id/diceCountPicker1"
    android:layout_width="48dp"
    android:layout_height="128dp"
    android:descendantFocusability="blocksDescendants"
    />

编辑2:

我在模拟器中测试过这个问题,并确认在果冻豆(4.1)之前不存在这个问题。在ICS中,它可以正常工作。那很烦人。但是我现在可能能够接受它。我将保持这个问题的开放状态,以寻找可能解决该错误的方法,但在我看来,这是一个真正的错误,我怀疑它是否可以修复。


你能发布一些布局代码,展示你是如何在XML文件中声明diceCountPicker1的吗? - Pratik Sharma
已更新问题,附带了NumberPicker的XML。 - Utoxin
请查看下面发布的解决方案。我尝试过,对我很有效。谢谢。 - Pratik Sharma
嗯,非常有趣。我刚在ICS模拟器中测试了一下,那里运行良好。设置一个Jellybean模拟器 我一直在使用手机测试JB,但也许是我运行的定制ROM有问题,而不是核心Android SDK。稍后我会回报结果。 - Utoxin
3个回答

2

好的,由于没有其他反馈,我打算关闭此事。以下是我的了解:

这似乎是Jellybean引入的一个bug。我已在模拟器中进行了测试,在ICS及更早版本中,UI的工作正常。目前,我将处理此问题,并尝试提交官方的错误报告。


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);
                }
            }
        });

这对我来说很有效,根据添加的条件启用/禁用时表现正常。

谢谢。


这不是我正在做的事情。我在一个NumberPicker上有Listener,并且它会禁用其他几个NumberPickers。我没有看到你的代码与我的代码有什么不同。 - Utoxin
我猜你是在Honeycomb或ICS上测试过了吗? - Utoxin

0
在NumberPicker和DatePicker的xml布局中设置android:enabled="false"并不能在我的Android 4.0.4设备上使控件变灰。然而,通过setEnabled(false)编程方式实现可以按预期工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接