独自コンポーネントを表示する
このアラートは、簡単にメッセージを表示できるのは便利なのですが、もっと本格的なダイアログとして活用するためにはボタン1つだけの画面ではあまり役に立ちません。ダイアログの表示をカスタマイズする必要があります。
このAlertDialog.showでは、あらかじめ用意しておいたViewをそのままダイアログ内にはめ込んで表示させることもできるようになっています。これを利用すれば、もっと複雑なダイアログを自分で用意することが可能になります。実際にやってみましょう。
package jp.allabout.android;
import jp.allabout.android.R;
import android.app.*;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;
public class MyAndy extends Activity {
private Activity me;
TextView text;
EditText msgedit;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
this.me = this;
// コンポーネントの設定
Button btn = (Button) this.findViewById(R.id.button);
text = (TextView)this.findViewById(R.id.text);
msgedit = new EditText(this);
// イベント組み込み
btn.setOnClickListener(new BtnAdapter());
}
// イベントクラス
class BtnAdapter implements OnClickListener {
@Override
public void onClick(View v) {
OkAdapter adapter = new OkAdapter();
AlertDialog.show(me, "テキストを入力", msgedit, "ok",
adapter, "cancel", adapter, true, new CancelAdapter());
}
}
class OkAdapter implements
android.content.DialogInterface.OnClickListener {
@Override
public void onClick(DialogInterface arg0, int arg1) {
text.setText("あなたは、" + msgedit.getText() + "と書いた。");
}
}
class CancelAdapter implements
android.content.DialogInterface.OnCancelListener {
@Override
public void onCancel(DialogInterface arg0) {
text.setText("どうしてキャンセルするの?");
}
}
}
テキストを入力するダイアログ。okすると入力したテキストを表示する。 |
ここでは、EditTextコンポーネントをあらかじめ用意しておき、これをalertにはめ込んで表示させています。今回のAlertDialog.showは、更にまた引数が増えていますね。
AlertDialog.show([Context],タイトル,[View],
ボタン名1,ボタンクリック時のリスナー1,
ボタン名2,ボタンクリック時のリスナー2,
キャンセル,キャンセル時のリスナー);
[Context]――ベースとなるContext(Activity)
タイトル――タイトルのテキスト
View――表示するViewコンポーネント
ボタン名1――1つ目のボタンに表示されるテキスト
ボタンクリック時のリスナー1――1つ目のボタンのOnClickListener
ボタン名2――2つ目のボタンに表示されるテキスト
ボタンクリック時のリスナー2――2つ目のボタンのOnClickListener
キャンセル――キャンセル可能かどうかを示すboolean値
キャンセル時のリスナー――キャンセル時のOnCancelListener
これで、独自のViewと2つのボタンを表示したダイアログが表示されます。ここでは、サンプルということで2つのボタンは同じリスナーを設定しておきましたが、もちろんそれぞれに別々の処理を用意することもできます。
これで、テキストの入力やラジオボタン、チェックボックスといったものをもったダイアログなど、自在に作って利用することができるようになります。ダイアログといえども、自由に使えるようになればなかなか強力な武器となるのです。