ボタンをクリックすると、画面にアラートウインドウが現れる。 |
アラートウインドウの表示方法
ここでは、BtnAdapterクラスとしてOnClickListenerを用意しておきました。onClickでは、AlertDialogクラスのshowメソッドを呼び出して、アラートを表示させています。これは、以下のような引数をもちます。
AlertDialog.show([Context],タイトル,メッセージ,ボタン名,キャンセル);
[Context]――ベースとなるContext(Activity)
タイトル――タイトルのテキスト
メッセージ――表示するメッセージ
ボタン名――ボタンに表示されるテキスト
キャンセル――キャンセル可能かどうかを示すboolean値
これで、画面に簡単にアラートを表示できます。最後のキャンセルに関する引数は、trueであればキャンセル可能、falseであれば不可を示します。
アラートを閉じる際の処理
このアラートウインドウは、パソコンなどのアラートと決定的に違う点が1つだけあります。それは「モーダルではない」という点です。モーダルとは、「それが閉じられるまで処理が停止される」という方式です。
例えば、ここではAlertDialog.showでアラートを表示しましたが、このメソッドを実行しても、そこで処理は停止しません。その後に何か処理があれば、アラートを表示したまま実行し続けてしまいます。ですから、「アラートを表示して、OKしたら続きを実行させる」というようなことは、このままではできないのですね。
では、どうするのか。それは、「アラートウインドウでボタンを押したときのイベント用リスナー」というものを作成するのです。そして、クリックしたらそのリスナーに処理してもらう、というわけです。
このイベントリスナーは、「OnClickListener」というものです。「ああ、ボタンをクリックしたときの処理で使ったやつだな」とすぐに思ったことでしょう。――が! 実は、違うのです。このOnClikListenerは、Buttonのクリック処理に使ったOnClickListenerとは違います。あちらはandroid.view.View.OnClickListenerでしたが、アラートのボタン用のものは、android.content.DialogInterface.OnClickListenerです。インターフェイス名は同じでも、まったく別のパッケージのものなのです。
では、このアラート用のOnClickListenerを利用する場合の書き方を以下に整理しておきましょう。
class クラス名 implements
android.content.DialogInterface.OnClickListener {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// ここに処理を用意する
}
}
このOnClickListenerを利用する場合にもっとも注意しなければならない点は、「2つのOnClickListenerを明確に区別してコーディングする」という点でしょう。通常、よく使うクラストはimportしてクラス名だけで使用できるようにしますが、2つのOnClickListener共にimportしてしまうと区別がつかなくなってしまいます。そこで、どちらか一方のみをimportし、もう一方はパッケージ名を指定して記述するようにしておくとよいでしょう。やはりButton用のOnClickListenerのほうが多用されますから、アラート用のものをパッケージ指定して書くほうがよいように思います。
中に用意するメソッドも、onClickと名前は同じですが、引数で渡されるものが異なっているのがわかります。第1引数のDialogInterfaceは、DialogInterfaceインターフェイスを実装したクラスのインスタンス(要するにイベントが発生したダイアログ)が渡され、第2引数にはクリックしたボタンの種類を示す数値が渡されます。