[Kotlin] 複数の選択肢を持つAndroidのダイアログ

2018年1月27日(更新: 2018年4月26日)

以前、Androidアプリにダイアログ(AlertDialog)を表示する方法について紹介しました。

[Kotlin] 2つのボタンを持つダイアログ(AlertDialog)を表示

今回は、複数の選択肢の中から行う処理を選べるダイアログの作成方法について紹介します。以下のように、3つの選択肢から処理を選ぶダイアログをサンプルとして作成します。

複数の選択肢を持つAndroidのダイアログを作成

ダイアログのプログラム

// どの選択肢が選ばれたかを保持する変数
var selectedId = 0

// 選択肢
val dialogMenu = arrayOf<String>("Apple", "Banana", "Cherry")

// ダイアログを作成して表示
AlertDialog.Builder(this).apply {
    setTitle("タイトル")
    setSingleChoiceItems(dialogMenu, 0, { _, i ->
        // 選択した項目を保持
        selectedId = i
    })
    setPositiveButton("OK", { _, _ ->

        // 選択肢によって処理を分岐
        when (selectedId) {
            0 -> Toast.makeText(context, "リンゴ", Toast.LENGTH_LONG).show()
            1 -> Toast.makeText(context, "バナナ", Toast.LENGTH_LONG).show()
            2 -> Toast.makeText(context, "サクランボ", Toast.LENGTH_LONG).show()
        }
    })
    setNegativeButton("Cancel", null)
    show()
}

実行結果です。

複数の選択肢を持つダイアログを表示

3つの選択肢を持つダイアログが表示され、選択肢を選ぶと、その日本語が Toast で表示されます。

以下は、選択肢の2つ目(Banana)を選んで OK を押した際の処理結果です。

ダイアログの選択肢を選んだ結果のToast

プログラムの詳細

ダイアログに表示する選択肢は配列で設定します。

val dialogMenu = arrayOf<String>("Apple", "Banana", "Cherry")

メソッド setSingleChoiceItems には、選択肢の配列を第一引数に設定します。また、どの選択肢を選んでいるかが第3引数に設定したイベントの第2引数の数値で取得できます。

省略せずにイベントリスナーを記述すると、以下のようになります。

setSingleChoiceItems(dialogMenu, 0, DialogInterface.OnClickListener { _, i ->
    // 選択した項目を保持
    selectedId = i
})

ポジティブボタン(ここでは「OK」)を押すと、選択肢の番号に応じた処理が行われます。Kotlin では switch が無く、その代わりに when を使用して条件分岐を行います。

Control Flow: if, when, for, while – Kotlin Programming Language

when (selectedId) {
    0 -> Toast.makeText(context, "リンゴ", Toast.LENGTH_LONG).show()
    1 -> Toast.makeText(context, "バナナ", Toast.LENGTH_LONG).show()
    2 -> Toast.makeText(context, "サクランボ", Toast.LENGTH_LONG).show()
}

おしまい

以上が、複数の項目の中から処理を選べるダイアログの作成方法です。

コメントを残す

メールアドレスが公開されることはありません。