Android号码选择器使用步骤

时间:2015-06-24 20:39:33

标签: java android numberpicker

我设法创建了一个数字选择器,以5为增量循环5到60.我唯一的问题是,当我达到60时,应用程序崩溃了。

{{1}}

logcat中还有一条错误消息

  

java.lang.ArrayIndexOutOfBoundsException:length = 12;指数= 12

我不明白为什么数字已经成功创建,为什么数字选择器会在被选中时崩溃?

3 个答案:

答案 0 :(得分:1)

我将问题的参数 mNumberPicker 替换为 np

  

setDisplayedValues():显示值数组的长度必须等于可选数字范围,该范围等于np.getMaxValue()-np.getMinValue()+ 1。

因此,您必须将 numberValues.length()== np.getMaxValue()-np.getMinValue()+ 1 设置为真。 在您的情况下,使np.setMaxValue(12)而不是(60)并执行以下操作。它将起作用。

简而言之,如果您想在NumberPicker中安排10〜200,并且预期的步数是10:

设置 minValue = 1,maxValue = 20和step = 10;

    int minValue = 1;
    int maxValue = 12;
    int step = 5;

    String[] numberValues = new String[maxValue - minValue + 1];
    for (int i = 0; i <= maxValue - minValue; i++) {
        numberValues[i] = String.valueOf((minValue + i) * step);
    }

    np = (NumberPicker)findViewById(R.id.numberPicker);

    np.setMinValue(minValue);
    np.setMaxValue(maxValue);

    np.setWrapSelectorWheel(false);
    np.setDisplayedValues(numberValues);

`

答案 1 :(得分:0)

改变这个:

        for (int i = minValue; i <= maxValue; i+= step)
        {
            numberValues[(i/step)-1] = String.valueOf(i);
        }

对此:

for (int i = 0; i < numberValues.length; i++)
{
    numberValues[i] = String.valueOf(step + i*step);
}

或者如果你想让它混淆(没有测试但应该工作):

for (int i = minValue; i < maxValue; i+= step)
{
    numberValues[(i/step)-1] = String.valueOf(i);
}

答案 2 :(得分:0)

有另一种方法可以解决这个问题,可以说,它似乎更直观。它使用onValueChange方法:

@Override
public void onValueChange(NumberPicker np, int oldVal, int newVal) {     
  if (newVal > oldVal) {
     if (newVal < np.getMaxValue())
        np.setValue(newVal+(myStep-1));
     }
     else
        np.setValue(newVal-(myStep-1));
  }