修改或更改NumberPicker的Min,Max和Displayed值

时间:2014-03-13 06:01:55

标签: android numberpicker

我有一个数字选择器几分钟。最初我将显示的值设置为15分钟。 即0,15,30,45,表示Min为1,max为4。 在用户选择菜单选项时,我想动态更改相同的数字选择器 有5分钟的间隔,这意味着显示的值将是0,5,10 ... 50,55最小值将保持为1,最大值将为12。

它适用于两种类型的初始设置。但是,当我尝试修改最大值或显示值时,我正在从索引中获取数组。当两种方式改变特征时,即15至5或5至15分钟间隔时,会出现问题。

问题是我做错了什么,或者根本没有数字选择器。 我的示例代码如下。感谢。

private void setMinsPicker(String opt) {
    String[] mins15 = { "0", "15", "30", "45" };
    String[] mins5 = { "0", "5", "10", "15", "20", "25", "30", "35", "40",
            "45", "50", "55" };
    final String[] mins;

    if (opt == "15") {
        mins = mins15;
    } else {
        mins = mins5;
    }

    numPickerMinutes = (NumberPicker) findViewById(R.id.pMinutes);

    int ml = mins.length;

    numPickerMinutes.setMinValue(1);
    numPickerMinutes.setDisplayedValues(mins);
    numPickerMinutes.setMaxValue(ml);
}

1 个答案:

答案 0 :(得分:22)

似乎发生这种情况是因为当NumberPicker检测到显示值或最大值的变化时,它会尝试刷新视图值(即访问显示值数组)。因此,如果您设置的显示值小于maxValue - minValue,则会抛出ArrayOutOfBoundsException,同样如果您设置的最大值大于当前值,则会抛出异常好吧。如果在更改最小/最大值之前将显示值设置为null,则视图将默认返回仅显示该值并且根本无法访问该数组。

所以在你的情况下,我会这样做......

private void setMinsPicker(String opt) {
    String[] mins15 = { "0", "15", "30", "45" };
    String[] mins5 = { "0", "5", "10", "15", "20", "25", "30", "35", "40",
            "45", "50", "55" };
    final String[] mins;

    if (opt == "15") {
        mins = mins15;
    } else {
        mins = mins5;
    }

    numPickerMinutes = (NumberPicker) findViewById(R.id.pMinutes);

    int ml = mins.length;

    // Prevent ArrayOutOfBoundExceptions by setting
    // values array to null so its not checked
    numPickerMinutes.setDisplayedValues(null);

    numPickerMinutes.setMinValue(1);
    numPickerMinutes.setMaxValue(ml);
    numPickerMinutes.setDisplayedValues(mins);
}