2011年11月25日金曜日

AlertDialog

メッセージを表示する方法として、これまではToastを使ってきました。これは一定時間表示するだけですので、ちょっと目を離していたり、読み終わらないうちにメッセージが消えてしまうこともあります。

今回はAlertDialogというダイアログを表示するクラスをご紹介します。


ダイアログを表示する

AlertDialogは、メッセージを表示したり、テキストを入力する際に使用します。以下のサンプルでは、動的にAlertDialogを生成して、メッセージを表示します。

Androidプロジェクトの設定
プロジェクト名:AlertDialogTest1a
ビルドターゲット:Android 2.1-update1
アプリケーション名:AlertDialogTest1a
パッケージ名:jp.co.triware.samples.AlertDialogTest1a
アクティビティーの作成:AlertDialogTest1aActivity
最小SDKバージョン:7

AlertDialogTest1aActivity.java
package jp.co.triware.samples.AlertDialogTest1a;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class AlertDialogTest1aActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btnAlert = (Button)findViewById(R.id.alert_btn);
        btnAlert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder dlg = new AlertDialog.Builder(AlertDialogTest1aActivity.this);
                // ダイアログのタイトル
                dlg.setTitle("データ保存");
                // タイトル左のアイコン
                dlg.setIcon(android.R.drawable.ic_dialog_alert);
                // ダイアログ内のメッセージ
                dlg.setMessage("データが変更されています。保存しますか?");
                // Backボタンでキャンセル可
                dlg.setCancelable(true);
                // ポジティブボタン
                dlg.setPositiveButton("保存", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(), "PositiveButton", Toast.LENGTH_SHORT).show();
                    }
                });
                // ニュートラルボタン
                dlg.setNeutralButton("破棄", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(), "NeutralButton", Toast.LENGTH_SHORT).show();
                    }
                });
                // ネガティブボタン
                dlg.setNegativeButton("キャンセル", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(), "NegativeButton", Toast.LENGTH_SHORT).show();
                    }
                });
                // キャンセルリスナー
                dlg.setOnCancelListener(new DialogInterface.OnCancelListener() {
                    @Override
                    public void onCancel(DialogInterface dialog) {
                        Toast.makeText(getApplicationContext(), "CancelListener", Toast.LENGTH_SHORT).show();
                    }
                });
                // アラートダイアログを表示
                dlg.show();
            }
        });
    }
}
ボタンを作るには、AlertDialog.Builderクラスの
・setPositiveButton()
・setNeutralButton()
・setNegativeButton()
の各メソッドを呼び出します。

3つのメソッドすべてを使う必要はなく、ボタンの数や内容にあわせて呼び出します。

メソッドの呼出順に関わらず、ボタンの配置は左から、PositiveButton、NeutralButton、NegativeButtonの並びになります。ボタンが持つ意味とメソッドの名前に関連はありません。

例えば「OK」だけであればどれを使っても構いませんので、どれかひとつを呼び出します。「Yes」「No」「Cancel」という並びでボタンを作る場合は、PositiveButton、NeutralButton、NegativeButtonをそれぞれYes, No, Cancelの処理を実装します。「Yes」「No」であれば、PositiveButtonとNeutralButton、PositiveButtonとNegativeButton、NeutralButtonとNegativeButtonのどの組み合わせでも使えます。それぞれをYes, Noとして使います。「No」「Yes」という並びであれば、例えばPositiveButtonをNo、NegativeButtonをYesとして処理を実装します。

ボタンがないダイアログを作る場合はこれらを呼び出しません。

また、setOnCancelListener()メソッドは、Backボタンが押された時に呼び出される処理を設定します。

main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button
        android:id="@+id/alert_btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="AlertDialog"
        />
</LinearLayout>

実行結果
"AlertDialog"のボタンをクリックするとダイアログを表示します。

ダイアログのボタンをクリックすると、各処理(Toast表示)を実行します。

0 件のコメント:

コメントを投稿