Значение по умолчанию Android Numberpicker не приходит

Когда средство выбора чисел загружено, значение по умолчанию не отображается на экране до тех пор, пока оно не коснется.

После прикосновения все работает нормально. Любая помощь приветствуется.

Также, если форматтер удалить, он работает нормально.

введите здесь описание изображения

диалог.xml

<NumberPicker
    android:id="@+id/number_picker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
     />

<Button
    android:id="@+id/apply_button"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/number_picker"
    android:text="@string/ok_string" />

Here is the activity code:

final NumberPicker np = (NumberPicker) d.findViewById(R.id.number_picker);
        np.setMaxValue(50);
        np.setMinValue(0);
        np.setWrapSelectorWheel(true);
        np.setOnValueChangedListener(this);
        np.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);

        np.setFormatter(new NumberPicker.Formatter() {
            @Override
            public String format(int i) {
                if (i == 25)
                    return "0";
                else
                    return String.valueOf(i - 25);
            }
        });
        np.setValue(25);

заранее спасибо


person Renjith    schedule 07.12.2014    source источник
comment
Может ли исходный цвет текста соответствовать цвету фона? Трудно визуализировать то, что вы видите без устройства.   -  person stkent    schedule 07.12.2014
comment
Возможный дубликат Android NumberPicker с форматированием не форматируется сначала рендеринг   -  person Sebastian    schedule 14.07.2017


Ответы (6)


@Ренджит

Спасибо за ссылку, но я думаю, что вы должны связать код или даже вставить его здесь. https://code.google.com/p/android/issues/detail?id=35482#c9

Field f = NumberPicker.class.getDeclaredField("mInputText");
f.setAccessible(true);
EditText inputText = f.get(mPicker);
inputText.setFilters(new InputFilter[0]);
person user1686407    schedule 16.06.2015
comment
Версия Kotlin ниже: stackoverflow.com/a/59704146/3451975 - person Jeehut; 12.01.2020

Проблема связана с ошибкой в ​​виджете NumberPicker.

И я решил это, используя метод 2, описанный здесь.

person Renjith    schedule 08.12.2014

Я нашел решение этой ошибки в NumberPicker, которое работает в API 18-26 без использования отражения и без использования setDisplayedValues() здесь.

person Sebastian    schedule 06.07.2017

Вот принятый ответ, написанный на Kotlin одной строкой:

// NOTE: workaround for a bug that rendered the selected value wrong until user scrolled, see also: https://stackoverflow.com/q/27343772/3451975
(NumberPicker::class.java.getDeclaredField("mInputText").apply { isAccessible = true }.get(this) as EditText).filters = emptyArray()

Обратите внимание, что я рекомендую оставить строку комментария, чтобы указать, почему нужен этот код.

person Jeehut    schedule 12.01.2020

У меня была та же проблема, и я использовал NumberPicker со строками. Моя проблема заключалась в том, что после того, как действие было открыто с переходом, значение по умолчанию в средстве выбора чисел было невидимым, хотя я устанавливал значения средства выбора с помощью picker.setDisplayedValues(list.toStringsArray())

введите здесь описание изображения

Итак, для меня решение было следующим:

private void populatePicker(NumberPicker picker, String[] strings, int index) {
    picker.setDisplayedValues(null);
    picker.setMinValue(0);
    picker.setMaxValue(strings.length - 1);
    picker.setDisplayedValues(strings);
    picker.setValue(index);

    try {
        Field field = NumberPicker.class.getDeclaredField("mInputText");
        field.setAccessible(true);
        EditText inputText = (EditText) field.get(picker);
        inputText.setVisibility(View.INVISIBLE);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
person CookieMonster    schedule 01.02.2018

Пытаться

np.setWrapSelectorWheel (ложь);

person Paolo    schedule 31.01.2020
comment
Можете ли вы рассказать, почему это, возможно, лучше, чем принятый ответ? - person stdunbar; 31.01.2020