0

我正在尝试使用 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);
4

3 回答 3

0

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

这是对我有用的代码:

List<String> stringArrayList = (List<String>) Arrays.asList(npUnits.getDisplayedValues());
String defaultUnits = stringArrayList.get(npUnits.getValue() - 1);
于 2014-03-18T15:01:10.163 回答
0

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

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

于 2014-03-18T14:19:40.283 回答
0

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

于 2017-07-06T12:39:20.770 回答