Android NumberPicker setMin/Max

Я пытаюсь установить минимум/максимум в NumberPicker. У меня есть следующие значения:

One, Two, Three, Four

я установил

picker.setMinValue(0);
picker.setMaxValue(1);

средство выбора будет отображать

One, Two

Однако, когда я установил

picker.setMinValue(1);
picker.setMaxValue(1);

он отображает One, но я ожидаю Two. Я смущен. Почему вместо этого отображается один?


person Upvote    schedule 16.10.2015    source источник


Ответы (2)


он отображает один, но я ожидаю два. Я смущен. Почему вместо этого отображается один?

Потому что NumberPicker работает немного не так, как вы думаете.

В средстве выбора номера вы устанавливаете значение с помощью кода, подобного этому:

numberPicker.setMinValue(7);
numberPicker.setMaxValue(10);

Ваш NumberPicker будет иметь числа 7, 8, 9, 10. Затем используйте setDisplayedValues:

numberPicker.setDisplayedValues(new String[]{"One", "Two", "Three", "Four"});

В NumberPicker есть строки «Один», «Два», «Три», «Четыре».

Теперь измените минимальное значение:

numberPicker.setMinValue(10);
numberPicker.setMaxValue(10);

В NumberPicker есть строки "One".

Это почему?

Потому что нет корреляции между реальными значениями и отображаемыми значениями. Как видно из исходного кода code of NumberPicker вот как вычисляется отображаемый текст:

String text = (mDisplayedValues == null) ? formatNumber(mValue) : mDisplayedValues[mValue - mMinValue];

Итак, если ваше минимальное значение равно 10, а выбранное значение равно 10, отображаемый текст является первым элементом массива.

Возвращаясь к вашему примеру, если вы хотите отобразить строку «Два», когда установите минимальное и максимальное значение равным 1, вам необходимо соответствующим образом изменить массив:

numberPicker.setDisplayedValues(new String[]{"Two"});
picker.setMinValue(1);
picker.setMaxValue(1);
person Mattia Maestrini    schedule 17.10.2015

picker.setMaxValue(2) должен дать два, если max равен 1, как вы можете ожидать 2

person Ashish Rawat    schedule 16.10.2015
comment
Индекс начинается с 0, поэтому для двух индексов 1, а не 2. Или я ошибаюсь? - person Upvote; 16.10.2015
comment
Это не фактические значения индекса !! - person Ashish Rawat; 16.10.2015