Android Numberpicker默认值不存在

Android Numberpicker默认值不存在,android,numberpicker,Android,Numberpicker,加载numberpicker时,默认值在触摸之前不会显示在屏幕上 一经触摸,一切正常。感谢您的帮助 此外,如果删除格式化程序,它也可以正常工作 dialog.xml 提前感谢这个问题似乎是NumberPicker小部件中的一个bug 我已经用描述的方法2解决了这个问题。@Renjith 谢谢你的链接,但我认为你应该把代码链接起来,甚至粘贴到这里。 我在NumberPicker中找到了这个bug的解决方案,它在API18-26中工作,不使用反射,也不使用setDisplayedValues

加载numberpicker时,默认值在触摸之前不会显示在屏幕上

一经触摸,一切正常。感谢您的帮助

此外,如果删除格式化程序,它也可以正常工作

dialog.xml


提前感谢

这个问题似乎是NumberPicker小部件中的一个bug

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

@Renjith

谢谢你的链接,但我认为你应该把代码链接起来,甚至粘贴到这里。


我在NumberPicker中找到了这个bug的解决方案,它在API18-26中工作,不使用反射,也不使用
setDisplayedValues()

我也遇到了同样的问题,我正在使用带字符串的
NumberPicker
。 我的问题是,在使用转换打开活动后,数字选择器中的默认值不可见,即使我使用
picker.setDisplayedValues(list.toString数组())设置选择器值。

因此,对我来说,解决方案如下:

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

以下是用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()
请注意,我建议保留注释行以记录为什么需要此代码。

试试看


np.setWrapSelectorWheel(假)

是否初始文本颜色与背景颜色匹配?在没有设备的情况下,很难想象你看到了什么。下面可能是Kotlin版本的副本:你能详细说明为什么这可能比公认的答案更好吗?
Field f = NumberPicker.class.getDeclaredField("mInputText");
f.setAccessible(true);
EditText inputText = f.get(mPicker);
inputText.setFilters(new InputFilter[0]);
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();
    }
}
// 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()