NumberPicker设置setMinValue不起作用

NumberPicker设置setMinValue不起作用。

private String[] numbers = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "10+"};
    //设置需要显示的内容数组
    numberPicker.setDisplayedValues(numbers);
    //设置最大最小值
    numberPicker.setMinValue(2);
    numberPicker.setMaxValue(numbers.length);
    numberPicker.setWrapSelectorWheel(false);

上面这么设置,是不是应该显示{ "3", "4", "5", "6", "7", "8", "9", "10", "10+"};
也就是从3开始显示,但实际上不是!还是从1开始显示……


numberPicker.setFormatter(value -> {
    String str = value + "";
    if (value > 10) {
        str = "10+";
    }
    return str;
});
numberPicker.setMinValue(3);
numberPicker.setMaxValue(11);
numberPicker.setWrapSelectorWheel(false);

引用 皆我百晓生 小程序回复内容作答:

问题可能出在设置最大值的地方。根据给出的代码,应该将
numberPicker.setMaxValue(numbers.length); 改为 numberPicker.setMaxValue(numbers.length-1);
这是因为setMaxValue()设置的是可选择的最大值索引,而索引是从0开始的,所以需要减去1。
另外,你也可以将 numberPicker.setMinValue(2); 的值改为1,以便从1开始显示。完整的代码如下所示:

private String[] numbers = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "10+"};
//设置需要显示的内容数组
numberPicker.setDisplayedValues(numbers);
//设置最大最小值
numberPicker.setMinValue(1);
numberPicker.setMaxValue(numbers.length-1);
numberPicker.setWrapSelectorWheel(false);

【以下回答由 GPT 生成】

问题可能出现在以下两个地方:

  1. numberPicker.setMinValue(2)方法设置的最小值不生效。这可能是因为在调用该方法之前NumberPicker已经被设置为了其他值,导致最小值设置不成功。为了解决这个问题,可以在调用setMinValue(2)方法之前,先调用numberPicker.setValue(2)方法将初始值设置为最小值,然后再设置最小值。
numberPicker.setValue(2);
numberPicker.setMinValue(2);
  1. numberPicker.setDisplayedValues(numbers)方法设置的显示内容数组和最小值不匹配。根据提供的代码示例,最小值应该为3,而显示内容数组中的第一个元素是"1",这可能导致NumberPicker从"1"开始显示。为了解决这个问题,可以修改显示内容数组,将"1"放到数组的第三个位置。
private String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "10+"};
numberPicker.setDisplayedValues(numbers);
numberPicker.setMinValue(2);
numberPicker.setMaxValue(numbers.length);
numberPicker.setWrapSelectorWheel(false);

这样设置之后,NumberPicker将从3开始显示内容,并且最小值也被正确设置为3。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^