<HOME

Dialogを使用してメッセージを表示する(ver.2.x以前)30分


Dialogを使用してメッセージをポップアップ表示する方法について学習します。

  1. 「DialogTraining」アプリを作成します。

    1. Android Studioを起動し、新規プロジェクトを作成します。

      「Welcome to Android Studio」画面の場合は、「Start a new Android Studio project」をクリックします。

      別のプロジェクトが開いている場合は、ツールバーから「File」→「New」→「New Project...」をクリックします。

    2. HelloWorldの時と同じようにプロジェクトを作成していきます。

      アプリ名は「DialogTraining」としてください。

      今回は「Backwards Compatibility (AppCompat)」のチェックは外しておきます。

  2. アプリに処理を追加して、Dialogの表示を確認します。

    1. 「activity_main.xml」と「MainActivity.java」を以下のように変更します。

      activity_main.xml

      コードを表示するにはJavaScriptを有効にしてください

      MainActivity.java

      コードを表示するにはJavaScriptを有効にしてください

    2. アプリを起動して、上からボタンを押して、表示されるメッセージを確認してみましょう。

  3. 各処理について説明します。

    • 以下の処理について説明します。

      コードを表示するにはJavaScriptを有効にしてください

      「AlertDialog.Builder」インスタンスを生成し、Dialog表示に必要なパラメータをセットしています。

      AlertDialogインスタンスは、まずBuilderを生成して必要なパラメータをセットし、Builderの「create」メソッドをコールすることで生成できます。


      Builderの、パラメータ設定メソッドは、Builder自信を返却するため、上記のように連続してメソッドをコールするような書き方ができます。

      (丁寧に記述すると、以下の処理を実行しているということです。)

      コードを表示するにはJavaScriptを有効にしてください

      Builderの「setTitle」メソッドで、Dialog表示時にタイトル部に表示されるテキストをセットしています。

      Builderの「setMessage」メソッドで、Dialog表示時にメッセージ部に表示されるテキストをセットしています。

      Builderの「show」メソッドは、内部的にcreateを行って表示まで行います。

    • 以下の処理について説明します。

      コードを表示するにはJavaScriptを有効にしてください

      Builderの「setIcon」メソッドで、Dialog表示時にタイトル部に表示されるアイコン画像をセットしています。


      Builderの「setPositiveButton」「setNegativeButton」メソッドで、Dialog下部に表示されるボタンのテキストと、クリック時のイベントリスナをセットしています。

      ボタンには「Positive」「Neutral」「Negative」という種類があり、「OK」はPositive、「Cancel」はNegative、といったように使い分けられます。

      これらのボタンが押されると、リスナの有無にかかわらずDialogは閉じられます。

      ただDialogを閉じるためにボタンを表示させたい(「閉じる」ボタンなど)場合はリスナにnullをセットすればOKです。

    • 以下の処理について説明します。

      コードを表示するにはJavaScriptを有効にしてください

      AlertDialogは、指定されたContextがUIを表示するWindow上に表示されます。

      そのため、UIを表示するWindowをもたないContext(ServiceやApplication)ではDialogを表示することはできません。


      ここでは、あえてAlertDialogのContextにActivityではなくApplicationを指定し、Exceptionが発生する(Dialogを表示できない)ことを確認しています。

    • 以下の処理について説明します。

      コードを表示するにはJavaScriptを有効にしてください

      Builderの「setItems」メソッドで、リスト表示する内容(文字列の配列)と、アイテムクリック時のイベントリスナをセットしています。

      アイテムクリック時には、リスナの有無にかかわらずDialogは閉じられます。


      後述する独自Viewをセットする方法でListViewを表示しても良いですが、AlertDialogには上記のように遥かに楽にリストを表示できるAPIが用意されています。

    • 以下の処理について説明します。

      コードを表示するにはJavaScriptを有効にしてください

      Builderの「setCancelable」メソッドで、BackキーでDialogを閉じることができるか否かをセットしています。

      デフォルト(何もセットしない場合)は「true」です。

      「false」をセットすると、BackキーでDialogを閉じることができなくなります。

      ボタン操作やタイムアウトで閉じる処理を実装してください。

    • 以下の処理について説明します。

      コードを表示するにはJavaScriptを有効にしてください

      Builderの「setView」メソッドで、独自Viewをセットしています。

    • 以下の処理について説明します。

      コードを表示するにはJavaScriptを有効にしてください

      Builderの「create」メソッドで、いったんAlertDialogインスタンスを生成して、変数に代入しています。


      AlertDialogの「setOnDismissListener」メソッドで、Dialogがdismissされた(閉じられた)際のイベントリスナをセットしています。

      Builderの「setOnDismissListener」メソッドの方は、OSのバージョンによって利用できないため、一度AlertDialogインスタンスを生成して、AlertDialogのメソッドを使用しています。

      コールバックメソッド「onDismiss」は、Backキーや各ボタン押下、外部からのdismissメソッド実行などの要因に関わらず、Dialogがdismissされた際にコールされます。


      AlertDialogの「show」メソッドで、AlertDialogを表示しています。

Dialogに関する詳細については公式ドキュメントに記載されています。

また、Androidは先人たちがネット上にたくさんの情報を残してくれています。

これらも活用して、是非このAPIを有効に使えるようになってください。