【问题标题】:NumberPicker.Formatter does not seem to be invoking in AndroidNumberPicker.Formatter 似乎没有在 Android 中调用
【发布时间】:2014-04-24 06:09:48
【问题描述】:

我正在尝试使用 NumberPicker 来显示字符串数组,但是当我尝试获取当前字符串的值时,该值是数组中字符串的整数索引值,这是默认响应。

我一直在尝试使用 NumberPicker.Formatter 将实际字符串作为值返回,而不是整数索引值。我已经实现了这个,但它似乎没有被调用。有人可以告诉我为什么会这样以及我能做些什么来解决它。提前致谢。

代码如下:

final NumberPicker npUnits = (NumberPicker) numberPickerView.findViewById(R.id.numberPicker2);

            npUnits.setMinValue(1);
            npUnits.setDisplayedValues(tableUnitsArray);
            npUnits.setMaxValue(tableUnitsArray.length);
            npUnits.setFormatter(new NumberPicker.Formatter() 
            {
                @Override
                public String format(int value) 
                {
                    ArrayList<String> stringArrayList = (ArrayList<String>) Arrays.asList(tableUnitsArray);
                    String defaultUnits = stringArrayList.get(value);
                    System.out.println("Value formatted result: " + defaultUnits);

                    return defaultUnits;
                }
            });
            npUnits.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);

【问题讨论】:

  • 您是否为这些值提供了替代值?如果是这样,格式化程序将不会被调用。
  • 我认为这是问题所在,因为我在 JavaDoc 中看到了这一点。但是你所说的替代值是什么意思?我使用 setDisplayedValues 方法将其设置为 String[]。

标签: android formatter numberpicker


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我已经找到了我的问题的答案。 NumberPicker.Formatter 是我做的错误的事情,因为我实际上不需要格式化任何东西。我只需要从 String[] 显示的值中获取当前值。

    这是对我有用的代码:

    List<String> stringArrayList = (List<String>) Arrays.asList(npUnits.getDisplayedValues());
    String defaultUnits = stringArrayList.get(npUnits.getValue() - 1);
    

    【讨论】:

      【解决方案3】:

      NumberPicker 允许您根据指定的最小值和最大值来选择值。它不需要你打电话给setDisplayedValues()NumberPicker 使用您指定的 String 数组作为一组替代值,这会导致您的格式化程序被忽略。尝试删除对setDisplayedValues() 的调用。

      如果您的 NumberPicker 值不是那么直接(即不是从最小值到最大值递增 1),那么您可以在格式化程序中转换您的值以获得所需的数字。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-12
        • 2018-03-27
        • 1970-01-01
        • 2014-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多