- Home ›
- Android入門 ›
- AlertDialogクラス ›
- HERE
ボタンクリック時の処理を設定したアラートダイアログを表示
ダイアログを表示した時に、単にメッセージを表示させるだけであればデフォルトのボタンの処理で構いませんが、ボタンをクリックされた時に何らかの処理を行いたい場合には、ボタンに対してイベント処理を設定します。
まずボタンが1つだけの場合のダイアログを表示させてみます。「AlertDialog」クラスで用意されているstaticメソッドである「show」メソッドを使います。前のページで利用したメソッドと同じですが引数が異なります。
show public static AlertDialog show(Context context, CharSequence title, CharSequence message, CharSequence buttonText, OnClickListener buttonListener, boolean cancelable, OnCancelListener cancelListener)
Display a simple alert dialog. This convenience method constructs an AlertDialog and shows it. Parameters: context the context in which this alert is created. title the title to be shown in the alert, pass null will not show a title message the alert message in the alert. buttonText the text to be shown in the button, pass null will make the alert buttonless. buttonListener a DialogInterface.OnClickListener to be notified when the button is clicked cancelable if true, clicking the BACK button will dismiss the alert. cancelListener if cancelable, this DialogInterface.OnCancelListener's onClick method will be called when the BACK button is clicked.
1番目の引数には引数にはダイアログを作成する元になった「Context」クラスのオブジェクトを指定します。ここでは(「Activity」クラスを継承したクラスのオブジェクトの)自分自身を表す「this」を指定して下さい。
2番目の引数にはダイアログのタイトルに表示される文字列、3番目の引数にはダイアログにメッセージとして表示される文字列、4番目の引数にはダイアログに設置されるボタンに表示される文字列を指定して下さい。
5番目の引数には「DialogInterface.OnClickListener」インターフェースを実装したクラスのオブジェクトを指定します。ボタンがクリックされた時のイベント処理を行う部分となります。後のサンプルでは自分自身に「DialogInterface.OnClickListener」インターフェースを実装してます。このような場合は自分自身を表す「this」を指定します。
6番目の引数にはエミュレーターの「Back」キー(又はキーボードの「ESC」キー)を有効にするかどうかを設定します。「true」を設定した場合は通常と同じく「Back」キーによって一つ前の画面に戻ります。「false」を設定した場合は「Back」キーが無効となりボタンをクリックしないとダイアログは閉じません。
7番目の引数には「DialogInterface.OnCancelListener」インターフェースを実装したクラスのオブジェクトを指定します。6番目の引数で「true」が設定された場合にキャンセル処理が行われた時のイベント処理を行う部分となります。後のサンプルでは自分自身に「DialogInterface.OnCancelListener」インターフェースを実装してます。このような場合は自分自身を表す「this」を指定します。
※「DialogInterface.OnClickListener」インターフェースの詳細については「DialogInterface.OnClickListenerインターフェース」を参照して下さい)。
※「DialogInterface.OnCancelListener」インターフェースの詳細については「DialogInterface.OnCancelListenerインターフェース」を参照して下さい)。
具体的には次のように記述します。
package jp.javadrive.android; import android.app.Activity; import android.os.Bundle; import android.app.AlertDialog; import android.content.DialogInterface; public class Test extends Activity implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener{ @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); AlertDialog.show(this, "Test", "Hello", "ok", this, true, this); } public void onClick(DialogInterface dialog, int whichButton) { } public void onCancel(DialogInterface dialog) { } }
※簡略化するために上記のように記述していますが、上記では一瞬表示されて消えてしまいます。より具体的には下記のサンプルを見てください。
サンプルプログラム
それでは実際に試してみます。プロジェクトを作成しソースコードを次のように変更しました。
package jp.javadrive.android; import android.app.Activity; import android.os.Bundle; import android.widget.LinearLayout; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import android.app.AlertDialog; import android.content.DialogInterface; public class Test03_01 extends Activity implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener{ private final int WRAP_CONTENT = ViewGroup.LayoutParams.WRAP_CONTENT; private TextView tv; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); LinearLayout linearLayout = new LinearLayout(this); linearLayout.setOrientation(LinearLayout.VERTICAL); setContentView(linearLayout); final Button button = new Button(this); button.setText("Open Dialog"); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { AlertDialog.show(Test03_01.this, "Alert Test", "Hello, This is Alert Dialog.", "ok", Test03_01.this, true, Test03_01.this); } }); linearLayout.addView(button, new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT)); tv = new TextView(this); linearLayout.addView(tv, new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT)); } public void onClick(DialogInterface dialog, int whichButton) { tv.setText("ok"); } public void onCancel(DialogInterface dialog) { tv.setText("cancel"); } }
ビルド後にエミュレーター上で実行します。
画面に表示されたボタンをクリックして下さい。ダイアログが表示されます。
では「ok」ボタンをクリックして下さい。ダイアログが閉じ、ボタンクリック時の処理として画面に「ok」が表示されます。
同じようにダイアログを表示させてから、今度は「Back」キーをクリックして下さい。ダイアログが閉じ、画面に「cancel」が表示されます。
( Written by Tatsuo Ikura )