numberPickerで調べると、数字を1刻みで並べたドラムロールは沢山出てくるのですが、任意の文字列を入れたものが出てこなかったので。
また、選択されたドラムロールの値の取得についても微妙に癖があったのでそれについて。
ここでは
①ドラムロールの作成
②OKボタンを押したらその時に選択されていた値を取得
この二点を
①ドラムロールの作成
// ドラムロールに表示したい値を含んだ配列を作る
String[] pref = ["東京", "千葉", "神奈川", "埼玉"];
// numberPickerをインスタンス化する
NumberPicker picker = fuga.findViewById(R.id.number_picker);
// 配列のインデックスの最小、最大を指定する
picker.setMinValue(0);
picker.setMaxValue(5);
// numberPickerに配列をセットする
picker.setDisplayedValues(pref);
インデックスのところは要注意です。
名前に惑わされて「値を入れるのかな?でもStringにMinもMaxもなくね」と最初ちょっと困惑しました。
setMinIdxとかそんな名前にした方がいいのではと思いました。
ちなみにxmlの方はNumberPickerで囲めば作れます
<NumberPicker
android:id="@+id/number_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
ここまでが、ドラムロールの作成です。
次は、
②選択されたドラムロールの値の取得
です。
NumberPickerにはgetValue()なるメソッドがあったので、これを試しました。
// ドラムロールに表示したい値を含んだ配列を作る
final String[] pref = ["東京", "千葉", "神奈川", "埼玉"];
// numberPickerをインスタンス化する
final NumberPicker picker = fuga.findViewById(R.id.number_picker);
// 配列のインデックスの最小、最大を指定する
picker.setMinValue(0);
picker.setMaxValue(5);
// numberPickerに配列をセットする
picker.setDisplayedValues(pref);
// OKボタンを押したら値を取得できるリスナーです)
fuga.findViewById(R.id.ok_button).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// getValueで取れるのはindexです。valueではありません。
int idx = picker.getValue();
String selectedPref = pref[idx];
dismiss();
}
});
このように、またまた要注意なのが、getValueで取れるのがindexという点ですね。
getIdxとかに(ry
selectedPrefに欲しかった値が入っています。
prefとpickerにはさりげなくfinalを付け加えてます。
iOSだとドラムロールの実装はかなり大変だったのですが、今回はアンドロイドが楽ですね。