NumberPicker.Formatter似乎没有在Android中调用

时间:2014-03-18 13:51:38

标签: android formatter numberpicker

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

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

以下是代码:

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

这是对我有用的代码:

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

答案 2 :(得分:0)

我找到了一个针对NumberPicker中的一些错误的解决方案,这些错误在API 18-26中有效,而不使用反射而不使用setDisplayedValues() here