7

我有Dialog一个 3numberpickers里面的机器人。更改第三个选择器会触发前 2 个显示值的更改pickers。但是我注意到当我更改显示的值并调用

setWrapSelectorWheel(false)

它仍然以视觉方式显示新值(我可以看到第一个值上方的最后一个值)。

如果我触摸选择器,它会突然卡入非环绕选择器轮。奇怪的是我打电话

getWrapSelectoWheel()

设置显示值后,它返回 false ......就像我设置它一样。但视觉上是错误的。

有什么想法吗?

非常感谢!

4

3 回答 3

15

我找到了一个解决方案,丹尼尔走在了正确的轨道上,但是一旦你已经设定了你的价值观,这似乎initializeSelectorWheelIndices实际上是一件坏事。因此,您需要在设置值之前调用setMinValue和。setMaxValue但是,如果您已经在选择器上设置了一个数组,如果您setMaxValue使用比当前数组更高的值调用,它会给您一个ArrayIndexOutOfBounds例外。

然后解决方案是清除旧的显示值,设置最大值,然后您可以调用setWrapSelectorWheeland setDisplayValues

public void updatePickerValues(String[] newValues){
  picker.setDisplayedValues(null);
  picker.setMinValue(0);
  picker.setMaxValue(newValues.length -1);
  picker.setWrapSelectorWheel(false);
  picker.setDisplayedValues(newValues);
}
于 2014-07-25T19:54:03.607 回答
3

我不知道您运行的是哪个版本的 Android,但我建议您阅读NumberPicker (v4.2.2) 的源代码。也许您需要触发对私有方法的调用,initializeSelectorWheelIndices这可以通过调用一些公共方法来完成。

尽管我确实认为您对选择器的使用,通过部分更改包装标志,似乎有点不寻常。您不希望这种行为保持一致吗?在这种情况下,在设置最小值和最大值后调用setWrapSelectorWheel一次,然后不理会它。

于 2013-06-20T00:15:16.267 回答
1

我已经在 kitkat 上验证了这种行为。这是一个错误。找不到现有报告,所以我在这里创建了一个新报告:错误# 98319

根据之前的答案,我发现在所有设置调用之后将 setWrapSelectorWheel(false) 作为最后一次调用将适用于大多数情况。在我的情况下,我在用户交互时动态更改 NumberPicker 的限制,我只是无法让它表现 100%。我选择使用换行选择器。

于 2015-01-16T21:08:21.097 回答