格式化程序在Android中似乎没有调用

格式化程序在Android中似乎没有调用,android,formatter,numberpicker,Android,Formatter,Numberpicker,我试图使用NumberPicker来显示字符串数组,但当我尝试获取当前字符串的值时,该值是数组中字符串的整数索引值,这是默认响应 我一直在尝试使用NumberPicker.Formatter将实际字符串作为值返回,而不是整数索引值。我已经实现了这个,但它似乎没有被调用。有人能告诉我为什么会这样以及我能做些什么来修复它吗。提前谢谢 代码如下: final NumberPicker npUnits = (NumberPicker) numberPickerView.findViewById(R.id

我试图使用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);
final NumberPicker npUnits=(NumberPicker)numberPickerView.findViewById(R.id.numberPicker2);
npUnits.setMinValue(1);
npUnits.setDisplayedValues(tableUnitsArray);
npUnits.setMaxValue(tableUnitsArray.length);
npUnits.setFormatter(新的NumberPicker.Formatter()
{
@凌驾
公共字符串格式(int值)
{
ArrayList stringArrayList=(ArrayList)Arrays.asList(tableUnitsArray);
String defaultUnits=stringArrayList.get(值);
System.out.println(“值格式化结果:+defaultUnits”);
返回默认单位;
}
});
npUnits.SetDegenantFocusability(NumberPicker.FOCUS\u BLOCK\u后代);

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


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

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

这是对我有用的代码:

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

我在NumberPicker中找到了一些bug的解决方案,它在API18-26中工作,不使用反射,也不使用
setDisplayedValues()

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