【问题标题】:Android Numberpicker default value not comingAndroid Numberpicker默认值没有出现
【发布时间】:2015-02-05 06:27:25
【问题描述】:

加载数字选择器时,默认值不会出现在屏幕上,直到被触摸。

一旦触摸,一切正常。任何帮助表示赞赏。

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

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

提前致谢

【问题讨论】:

标签: android numberpicker


【解决方案1】:

@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】:

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

我已经使用here 描述的方法 2 解决了它。

【讨论】:

    【解决方案3】:

    我在 NumberPicker 中找到了解决此错误的解决方案,该解决方案适用于 API 18-26,无需使用反射和setDisplayedValues()here。

    【讨论】:

      【解决方案4】:

      这是用 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()
      

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

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题,我使用的是 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();
            }
        }
        

        【讨论】:

          【解决方案6】:

          试试

          np.setWrapSelectorWheel(false);

          【讨论】:

          • 您能否详细说明为什么这可能比公认的答案更好?
          猜你喜欢
          • 2016-12-22
          • 2012-09-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-04
          • 2014-01-24
          • 1970-01-01
          相关资源
          最近更新 更多