NumberPickerを使うたびに詰まってる気がするのでメモ。
NumberPickerで例えばminが500, max が 5000, step が500としたい場合、これがなかなかわかりにくい。メソッドを呼ぶだけで問題が起きないようにリファクタリングした。今後はNumberPickerを使い際はこのメソッドを使う。
private void setNumberPicker(NumberPicker picker, int min, int max, int step, int format) { picker.setMinValue(min / step - 1); picker.setMaxValue((max / step) - 1); String[] valueSet = new String[max / min]; for (int i = min; i <= max; i += step) { valueSet[(i / step) - 1] = getString(format, i); } picker.setDisplayedValues(valueSet); }
最後の引数 format
は, 例えば strings.xml に %d円
とかしておいて、formatにR.id.format_yen
みたいにして指定すると、NumberPickerの各値に反映できる。
ここで注意したいのが、これでpicker.getValue()
を呼ぶと、0からの連番の数字になるので、+1してSTEPをかけあわせないといけないことに注意。