昔は Android もダイアログ表示が楽だったけど、
今ダイアログ表示しようとすると 意外と面倒くさい手順になってます。
▼ こういう感じで煩雑
- FialogFragmentクラスを継承して
- その中でダイアログの制御をして
- Activityとかでダイアログ表示
昔は AlertDialog 単体でも使えてたけど、メモリリークを防ぐために DialogFragment を使うことが推奨になっているみたいですね。
でも「コードが冗長になるし、もっとスマートに書きたい」みたいに思ってました。
そんな時に SimpleAlertDialog という使いやすいライブラリ発見
最低限のシンプルさで便利だったので、
この SimpleAlertDialog の使い方とか色々まとめてみます。
このページの目次
まず SimpleAlertDialog で普通のダイアログを表示してみる
まずは何の変哲もない メッセージダイアログ表示 にチャレンジ
導入手順も合わせて紹介すると、次の手順でできました。
1.build.gradleにライブラリを追加
まずモジュールレベルの build.gradle にライブラリ追加
▼ この1行を書き加えるだけ
1 |
implementation "com.github.ksoichiro:simplealertdialog:1.2.1" |
そしたら 【Async NOW】 を押してプロジェクトを同期(Android Studio の場合)
ライブラリの導入自体はたったこれだけです。
2.SimpleAlertDialogFragment を作って表示
このライブラリには SimpleAlertDialogFragment が用意されてます。
単純に DialogFragment を継承しただけだけど、これがスゴク便利です。
なぜならこれ1つで色々なダイアログ種類に対応できるから
- メッセージダイアログ
- リスト選択型ダイアログ
- アイコン付きダイアログ
- テキスト入力ダイアログ
- その他色々・・・
今回は一番オーソドックスな "はい" or "いいえ" ボタンだけついたダイアログを作ってみます。
その場合、ダイアログ呼び出し手順は次みたいな感じです。
1.まず SimpleAlertDialogFragment インスタンス作成&表示
1 2 3 4 5 6 7 8 |
new SimpleAlertDialogFragment.Builder() .setTitle( "Question" ) .setMessage( "Is this a dialog?" ) .setPositiveButton( "YES" ) .setNegativeButton( "NO" ) .setRequestCode(12345) .create() .show( getFragmentManager(), "Dialog" ); |
2.ボタン用のインターフェースを Activity に実装
1 2 3 4 |
public class MainActivity extends AppCompatActivity implements SimpleAlertDialog.OnClickListener { ... } |
3.Activity内でボタン用メソッドをオーバーロード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@Override public void onDialogPositiveButtonClicked( SimpleAlertDialog dialog, int requestCode, View view ) { if ( requestCode == 12345 ) { /// Do something } } @Override public void onDialogNegativeButtonClicked( SimpleAlertDialog dialog, int requestCode, View view ) { if ( requestCode == 12345 ) { /// Do something } } |
Activityにダイアログ用メソッド(はいボタン用は onDialogPositiveButtonClicked 、いいえボタン用は onDialogNegativeButtonClicked )をオーバーライドするのが大事なポイント
それ以外は普通の AlertDialog とほぼ変わらないと思います。
表示されたメッセージダイアログはこんな感じ
それで今作ったメッセージダイアログを表示してみました。
▼ そのダイアログがコチラ
さっき書いたコードのように "YES" を押すと onDialogPositiveButtonClicked コールバックが呼ばれ、 "NO" を押すと onDialogNegativeButtonClicked コールバックが呼ばれます。
あとは普通のアラートダイアログとほぼ同じですね。
ついでにリストダイアログも作ってみた
ついでに リストダイアログ表示 も試してみたので紹介
普通に選択ダイアログを作ろうとすると、 ArrayAdapter とか ListView とか・・・色々拡張しなくていけなくて超面倒くさいですよね。アレは本当に開発意欲をガリガリ削がれる
でもこのライブラリなら一切そういうの不要で作れちゃいます。
そのリストダイアログの作り方は以下の通り
1.まず SimpleAlertDialogFragment を作成&文字列リスト渡す
1 2 3 4 5 6 7 8 9 10 11 |
/// 選択ダイアログに表示する文字列リスト CharSequence itemNameList[] = new String[]{ "3minutes", "5minutes", "15minutes", "30minutes", "45minutes", "60minutes" }; new SimpleAlertDialogFragment.Builder() .setTitle("Choose one") .setItems( itemNameList ) .setRequestCode( 12345 ) .create().show(getFragmentManager(), "dialog"); |
2.Activityにダイアログ用インターフェースを実装
1 2 3 4 |
public class MainActivity extends AppCompatActivity implements SimpleAlertDialog.OnItemClickListener { ... } |
3.Activity内でメソッドオーバーライドして結果受け取る
1 2 3 4 5 6 |
@Override public void onItemClick(final SimpleAlertDialog dialog, int requestCode, int which) { if (requestCode == 12345) { // Do something } } |
オーバーライドした onItemClick 内でどのアイテムが選択されたか取得可能
ただし配列のインデックス番号が返されることに要注意です。
実際に表示してみたリストダイアログの見た目
今作ったリストダイアログを実機で表示してみました。
▼ その結果がコチラ
ちゃんとリストに渡した文字列配列がリスト表示されてます。
その上 ListView とか ArrayAdapter とか カスタムデータ も一切作る必要ないから楽ですね。
凝ったダイアログを作る必要ないなら、SimpleAlertDailog で十分な気がする
以上、Androidでダイアログ表示できるライブラリの紹介でした。ではまた