【问题标题】:NumberPicker with negative and possitive values [duplicate]具有负值和正值的 NumberPicker [重复]
【发布时间】:2012-07-03 10:10:18
【问题描述】:

我正在尝试为我的 NumberPicker 使用一组由 (-50 -> 50) 组成的数字,NumberPicker 的 MinValue / MaxValue 设置为 0 / 100,然后 setValue 设置为 50 作为默认起点( 0),知道为什么它正确显示数字,除了-1到-5......当没有选择它们时它们显示很好......当它们被选中时它们显示为-19,-29,-39,-49,-50。

我已经测试了我提供给它的 int 数组,其中的所有值都很好。

这是我用来填充 NumberPicker 的代码中的 sn-p...

String[] currentScoreArray = new String[100];
final NumberPicker currentScore = (NumberPicker) findViewById(R.id.currentScore);
for (int i = 0; i <= 100; i++)
    currentScoreArray[i] = Integer.toString(i - 50);
currentScore.setMaxValue(100);
currentScore.setMinValue(0);
currentScore.setWrapSelectorWheel(false);
currentScore.setDisplayedValues(currentScoreArray);
currentScore.setValue(50);

在与 baba 男高音交谈后,我仍然无法解决这个问题。我已经制作了一个 YouTube 视频,并在视频评论的链接中包含了代码和 logcat。

http://www.youtube.com/watch?v=bF39THktVY4

【问题讨论】:

  • 请在您处理和显示选择的地方发布代码。
  • 你指的是随之而来的 XML 吗?我没有使用任何代码来处理和显示选择,因为 NumberPicker 是一个 android 类(我让 android 代码为我做所有这些)。
  • 我对您的代码一无所知。首先,如果您希望范围为 [-50, 50],为什么要将最小值和最大值设置为 0 和 100。其次,为什么不尝试从-50到50运行for循环,而不是每次都处理(i-50)操作。
  • 我尝试了你所说的并稍微改变了 for 循环(这是由于我最初使用控件的方式)。但就像我说的那样,这是这里的原始问题......“java.lang.IllegalArgumentException:minValue must be >= 0”是我尝试做 currentScore.setMinValue(-50);
  • 你检查 currentScoreArray 了吗?你能正确地看到从 -50 到 50 的所有数字吗?另外,“未选中时它们显示正常”是什么意思?

标签: android


【解决方案1】:

老问题,但我为其他用户发布了一个想法:

也许你可以使用NumberPicker.Formatter

例子:

final int minValue = -50
final int maxValue = 50
NumberPicker numberPicker = new NumberPicker(myActivity);
numberPicker.setMinValue(0);
numberPicker.setMaxValue(maxValue - minValue);
numberPicker.setValue(myCurrentValue - minValue);
numberPicker.setFormatter(new NumberPicker.Formatter() {
    @Override
    public String format(int index) {
        return Integer.toString(index - minValue);
    }
});

然后取回选中的值:

int myNewValue = numberPicker.getValue() + minValue

【讨论】:

    【解决方案2】:

    您似乎需要实现自己的 NumberPicker 类。您可以从这里的代码开始:http://www.quietlycoding.com/?p=5。它显然与 Google NumberPicker 小部件使用的很接近。 在 EditText 对象上设置的 InputFilter 是防止显示负数的原因。您可以简单地注释掉对 EditText 对象上的 setFilters 的调用,它将显示负数以帮助您开始。深入研究 InputFilter 实现可以提供更好的解决方案。

    【讨论】:

      猜你喜欢
      • 2014-01-24
      • 2023-02-10
      • 2013-11-24
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-25
      相关资源
      最近更新 更多