Android 修改或更改NumberPicker的最小值、最大值和显示值

Android 修改或更改NumberPicker的最小值、最大值和显示值,android,numberpicker,Android,Numberpicker,我有一个电话号码选择器。最初,我将显示值设置为15分钟间隔。 也就是说,0,15,30,45表示最小值为1,最大值为4。 在用户选择菜单选项时,我想动态地将相同的数字选择器更改为 有5分钟的间隔,这意味着显示值将为0,5,10。。。50,55分钟将保持为1,最大为12 这两种类型的初始设置都适用。然而,当我试图修改最大值或显示的值时,我将数组从索引中取出。当以15至5分钟或5至15分钟的间隔改变特性时,会出现问题 问题是我做错了什么,或者这在数字选择器中根本不可能。 我的示例代码如下。谢谢 pr

我有一个电话号码选择器。最初,我将显示值设置为15分钟间隔。 也就是说,0,15,30,45表示最小值为1,最大值为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);
}

这似乎是因为当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);
}