Android Numberpicker默认值未来

时间:2014-12-07 14:41:54

标签: android numberpicker

加载数字选择器后,触摸前默认值不会显示在屏幕上。

一旦感动,一切正常。非常感谢。

如果格式化程序被删除,它也能正常工作。

enter image description here

dialog.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" />

以下是活动代码:

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);

提前致谢

6 个答案:

答案 0 :(得分:5)

问题似乎是NumberPicker小部件中的一个错误。

我使用here描述的方法2解决了这个问题。

答案 1 :(得分:5)

@Renjith

感谢您的链接,但我认为您应该链接代码,甚至将其粘贴到此处。 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]);

答案 2 :(得分:2)

我在NumberPicker中找到了一个解决方案,该解决方案适用于API 18-26而不使用反射而不使用setDisplayedValues() here

答案 3 :(得分:1)

以下是用科特林写的单行答案:

// 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()

请注意,我建议保留注释行以记录为什么需要此代码。

答案 4 :(得分:0)

我遇到了同样的问题,而我正在使用NumberPicker和Strings。 我的问题是,在通过转换打开活动后,数字选择器中的默认值是不可见的,即使我使用picker.setDisplayedValues(list.toStringsArray())设置选择器值

enter image description here

所以对我来说解决方案如下:

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();
    }
}

答案 5 :(得分:0)

尝试

np.setWrapSelectorWheel(false);