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