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

前端之家收集整理的这篇文章主要介绍了android – 修改或更改NumberPicker的Min,Max和Displayed值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个数字选择器几分钟.最初我将显示的值设置为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","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);
}

猜你在找的Android相关文章