はじめに
ダイアログ上で選択させる表示を実装することがたまにありますよね。
要件としてはあまり多くない印象ですが、デザインに特に決まりがなければ簡単に表示する方法があるので残しておこうと思います。
ひとつ選択可能なリスト選択ダイアログ
まず、ひとつだけ選択可能なダイアログの実装方法を紹介します。
実装は非常にシンプルで、表示したいタイミングで以下を実装するだけです。
val items = listOf("りんご", "メロン")
MaterialAlertDialogBuilder(this)
.setTitle("タイトル")
.setSingleChoiceItems(items.toTypedArray(), 0) { dialog, index ->
// アイテムを選択した際の処理
}
.setPositiveButton("OK") { _, _ ->
// ok押した際の処理
}
.setNegativeButton("Cancel") { _, _ ->
// cancelを押した際の処理
}
.setCancelable(false)
.show()
以上になります、表示された形が以下です。
setSingleChoiceItemsの第二引数は表示した際に最初に選択されていて欲しいアイテムのpositionになります。
該当するアイテムが存在しないpositionが設定されると、何も選択されていない状態になります。
複数選択可能なリスト選択ダイアログ
次に複数選択可能なリスト選択ダイアログの実装方法を紹介します。
val items = listOf("りんご", "メロン")
MaterialAlertDialogBuilder(this)
.setTitle("タイトル")
.setMultiChoiceItems(items.toTypedArray(), BooleanArray(items.size)) { dialog, index, isChecked ->
// アイテムを選択した際の処理
}
.setPositiveButton("OK") { _, _ ->
// ok押した際の処理
}
.setNegativeButton("Cancel") { _, _ ->
// cancelを押した際の処理
}
.setCancelable(false)
.show()
以上になります、表示された形が以下です。
setMultiChoiceItemsの第二引数は単一選択時と同様に特定のアイテムの選択有無ですが、こちらは複数選択が可能ということでbooleanのリストとなっています。
このbooleanのリストはitemと同じ要素数が必要で、少なかったりするとIndexOutOfBoundsでクラッシュしますのでご注意ください。
さいごに
レイアウトを調整したい場合はこのダイアログを使用することはできませんが、シンプルでいい場合はかなり簡単に実装が可能です。
実装の際の選択肢にでもしていただければ幸いです。