【问题标题】:Android NumberPicker wraps values when displayed values are changedAndroid NumberPicker 在显示值更改时包装值
【发布时间】:2013-05-24 12:09:34
【问题描述】:

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

时,我注意到了
setWrapSelectorWheel(false)

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

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

getWrapSelectoWheel()

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

有什么想法吗?

非常感谢!

【问题讨论】:

  • 您找到解决方案了吗?我仍在处理同样的问题,以编程方式设置选择器会重置包装视觉效果。

标签: java android numberpicker


【解决方案1】:

我找到了一个解决方案,Daniel 走在了正确的轨道上,但是一旦您已经设置了值,initializeSelectorWheelIndices 似乎实际上是一件坏事。因此,您需要在设置值之前调用setMinValuesetMaxValue。但是,如果您已经在选择器上设置了一个数组,如果您调用 setMaxValue 时的值高于当前数组,它会给您一个 ArrayIndexOutOfBounds 异常。

然后解决办法是清除旧的显示值,设置你的最大值,然后你可以调用setWrapSelectorWheelsetDisplayValues

public void updatePickerValues(String[] newValues){
  picker.setDisplayedValues(null);
  picker.setMinValue(0);
  picker.setMaxValue(newValues.length -1);
  picker.setWrapSelectorWheel(false);
  picker.setDisplayedValues(newValues);
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2019-01-05
        • 2014-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-19
        • 2014-01-24
        • 2015-10-31
        • 1970-01-01
        相关资源
        最近更新 更多