LoginSignup
7
7

More than 5 years have passed since last update.

NumberPicker(ドラムロール)に任意の文字列を入れる方法と、値の取得

Last updated at Posted at 2019-03-15

numberPickerで調べると、数字を1刻みで並べたドラムロールは沢山出てくるのですが、任意の文字列を入れたものが出てこなかったので。
また、選択されたドラムロールの値の取得についても微妙に癖があったのでそれについて。

ここでは
①ドラムロールの作成
②OKボタンを押したらその時に選択されていた値を取得

この二点を

①ドラムロールの作成

hoge.java
// ドラムロールに表示したい値を含んだ配列を作る
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で囲めば作れます

fuga.xml
    <NumberPicker
        android:id="@+id/number_picker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

ここまでが、ドラムロールの作成です。

次は、
②選択されたドラムロールの値の取得
です。
NumberPickerにはgetValue()なるメソッドがあったので、これを試しました。

hoge.java
// ドラムロールに表示したい値を含んだ配列を作る
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だとドラムロールの実装はかなり大変だったのですが、今回はアンドロイドが楽ですね。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7