📝
AlertDialogのリストの選択肢
はじめに
AlertDialog
は、Android アプリ開発でよく使用される UI コンポーネントです。
とても便利で、リストの選択肢から処理を選択する実装をよくします。
本記事では、Pair
を使って、コードをシンプルに整理する方法を紹介します。
改善前のコード
AlertDialog - setItems
の実装は、以下のようになります。
コード例
val items = arrayOf("メール", "電話")
AlertDialog.Builder(context)
.setTitle("連絡方法")
.setItems(items) { _, which ->
when (which) {
0 -> android.util.Log.d("mail", "メールを送信")
1 -> android.util.Log.d("tel", "電話をかける")
}
}
.show()
問題点
例えば Line
を増やしたい...となった場合
-
選択肢と処理が分離
選択肢と処理が別々に記述されているため、変更時にミスが発生しやすい。 -
順序の変更が面倒
選択肢の順序を変更すると、対応するwhen
文も修正する必要がある。 -
拡張性の欠如
選択肢が増えるとwhen
文が複雑化し、管理が難しくなる。
... index を意識するのがめんどくさい。
改善後のコード
Pair
を使うことで、選択肢と処理をシンプルに整理できます。
改善後のコード例
val items = listOf(
Pair("メール", { android.util.Log.d("mail", "メールを送信") }),
Pair("電話", { android.util.Log.d("tel", "電話をかける") }),
)
AlertDialog.Builder(context)
.setTitle("連絡方法")
.setItems(items.map { it.first }.toTypedArray()) { _, which ->
// 選択されたアイテムのコールバックを実行
items[which].second()
}
.show()
改善ポイント
-
シンプルな構造
-
Pair
を使って選択肢と処理を同じ場所に定義。 - コードの可読性が向上し、変更や順序の入れ替えも簡単に。
-
実行結果
-
「メール」を選択
→ コンソール出力に「メールを送信」と表示。 -
「電話」を選択
→ コンソール出力に「電話をかける」と表示。
この方法のメリット
- 柔軟性: 選択肢を簡単に追加・削除・並べ替え可能。
- 可読性: 選択肢と処理が同じ場所に記述されているため、コードの意図が明確。
- 保守性: 修正が必要な箇所が少なく、コードの変更が容易。
例: Line
を追加
val items = listOf(
Pair("メール", { android.util.Log.d("mail", "メールを送信") }),
//追加
Pair("Line", { android.util.Log.d("line", "Lineを送信") }),
Pair("電話", { android.util.Log.d("tel", "電話をかける") }),
)
... 入れ替え・挿入・削除の実装も負担が少ない。
まとめ
本記事では、AlertDialog
の実装を改善する方法として、Pair
を使ったシンプルな実装を紹介しました。
Discussion