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