我有一个数字选择器几分钟.最初我将显示的值设置为15分钟.
即0,15,30,45,表示Min为1,max为4.
在用户选择菜单选项时,我想动态地将相同的数字选择器更改为
有5分钟的间隔,这意味着显示的值将是0,5,10 … 50,55最小值将保持为1,最大值为12.
即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","20","25","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","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); }