我有一个内置3 Dialog
的安卓numberpickers
。更改第3个选择器会触发前2 pickers
的显示值的更改。但是当我更改显示的值时,我注意到了,然后调用
setWrapSelectorWheel(false)
它仍然以可视方式显示新值(我可以看到第一个值之上的最后一个值)。
如果我触摸拾取器,它会突然卡入非包裹选择轮。奇怪的是我打电话
getWrapSelectoWheel()
设置显示的值后,它返回false ...就像我设置它一样。但在视觉上这是错误的。
任何想法发生了什么?
非常感谢!
答案 0 :(得分:13)
我找到了一个解决方案,Daniel在正确的轨道上,但是一旦你已经设定了你的价值,initializeSelectorWheelIndices
似乎是一件坏事。因此,您需要在设置值之前调用setMinValue
和setMaxValue
。但是,如果您的选择器上已经有一个数组,如果您使用比当前数组更高的值调用setMaxValue
,它将为您提供ArrayIndexOutOfBounds
例外。
然后解决方法是清除旧的显示值,设置最大值然后,您可以调用setWrapSelectorWheel
和setDisplayValues
:
public void updatePickerValues(String[] newValues){
picker.setDisplayedValues(null);
picker.setMinValue(0);
picker.setMaxValue(newValues.length -1);
picker.setWrapSelectorWheel(false);
picker.setDisplayedValues(newValues);
}
答案 1 :(得分:3)
我不知道您正在运行的Android版本,但我建议您阅读source code for the NumberPicker (v4.2.2)。也许您需要触发对私有方法initializeSelectorWheelIndices
的调用,这可以通过调用某些公共方法来完成。
虽然我确实认为你对拾取器的使用,通过改变包装标志的一部分,似乎有点不寻常。你不希望这种行为保持一致吗?在这种情况下,在设置了最小值和最大值之后调用setWrapSelectorWheel
,然后不管它。
答案 2 :(得分:1)
我已经在kitkat上验证了这种行为。这是一个错误。无法找到现有报告,因此我在此处创建了一个新报告:bug# 98319
根据之前的回答,我发现在所有设置调用之后进行最后一次调用的setWrapSelectorWheel(false)将适用于大多数情况。在我的情况下,我正在动态更改NumberPicker的限制,因为用户正在进行交互,我只是不能让它表现得100%。我选择使用换行选择器。