Android NumberPicker обертывает значения при изменении отображаемых значений

У меня есть Android- Dialog с 3- numberpickers внутри. Изменение третьего сборщика вызывает изменение отображаемых значений первых 2 pickers . Однако я заметил, когда изменяю отображаемые значения и звоню

 setWrapSelectorWheel(false) 

Он по-прежнему показывает новые значения как визуально визуализированные (я могу увидеть последнее значение выше первого).

Если я прикоснусь к сборщику, он внезапно защелкнется в колесе селектора без упаковки. Что странно, я звоню

 getWrapSelectoWheel() 

После установки отображаемых значений и возвращает false … точно так же, как я его установил. Но визуально это неправильно.

Любые идеи, что происходит?

Большое спасибо!

Я нашел решение, Даниэль был на правильном пути, однако кажется, что initializeSelectorWheelIndices на самом деле плохо, если вы уже установили свои значения. Из-за этого вам нужно вызвать setMinValue и setMaxValue вы установите свои значения. Однако, если у вас уже установлен массив на вашем сборщике, если вы вызываете setMaxValue с более высоким значением, чем текущий массив, он даст вам исключение ArrayIndexOutOfBounds .

Затем решение должно очистить старые значения дисплея, установить максимальное значение, затем вы можете вызвать setWrapSelectorWheel и setDisplayValues :

 public void updatePickerValues(String[] newValues){ picker.setDisplayedValues(null); picker.setMinValue(0); picker.setMaxValue(newValues.length -1); picker.setWrapSelectorWheel(false); picker.setDisplayedValues(newValues); } 

Я не знаю, какую версию Android вы используете, но я бы предложил вам прочитать исходный код для NumberPicker (v4.2.2) . Возможно, вам нужно вызвать вызов частного метода initializeSelectorWheelIndices который может быть выполнен путем вызова некоторых общедоступных методов.

Хотя я думаю, что ваше использование сборщика, изменив часть флага частичного переноса, кажется немного необычным. Разве вы не хотите, чтобы это поведение было последовательным? В этом случае сделайте вызов setWrapSelectorWheel один раз после того, как вы установите минимальные и максимальные значения, а затем оставьте его в покое.

Я тоже проверил это поведение на kitkat. Это ошибка. Не удалось найти существующий отчет, поэтому я создал новый здесь: bug # 98319

По предыдущим ответам я обнаружил, что для большинства сценариев выполнение setWrapSelectorWheel (false) последнего вызова после всех вызовов настройки будет работать. В моем случае я динамически меняю ограничения на NumberPicker, поскольку пользователь взаимодействует, и я просто не могу заставить его вести себя на 100%. Я предпочитаю жить с селектором оберток.