Adsenseバナー

2010年12月30日木曜日

Alert Dialogの標準ボタン操作

Alert Dialogは3つのボタンを持っています。

  1. Positive Button(主にOKボタンとして)
  2. Neutral Button(主に…なんだろう?Noボタンがあった場合のキャンセルボタンとか?)
  3. Negative Button(主にNoボタンやキャンセルボタン)

で、これらを使いたいときは、AlertDialog.Builder#set~~Button()を使えばいい。
それはいいんですが、今回、このボタンの有効/無効を制御したかったのに、すんなりできなかったのでメモ。


Positive Buttonは次のようにして習得が可能だとAPIリファレンスにある。

Button okBtn = dialog.getButton(DialogInterface.BUTTON_POSITIVE);

なので、これをAlertDialog.Builder#create()でDialogのインスタンスを取得したあとに実行するも、NULLが返ってくる。
なぜかとネットを華麗にサーフィンしていたら、次のようにしなきゃだめよっていう記述を海外サイトのどこか(場所が分からなくなってしまった)で見つけました。

categoryNameEditText.addTextChangedListener(new TextWatcher() {
    public void afterTextChanged(Editable s) {
        Button okBtn = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
        okBtn.setEnabled(s.length() > 0);
    }
});
// 続く...

つまり、リスナーメソッドの中で都度取得しなさいってことです。
これはバグとして認知されていて、現在はこの問題は解消したようですが、Android1.6とかにも対応したアプリを作ろうとすると、こうしないとだめです。
効率が悪いけど、まあ、仕方ないですね。

0 件のコメント:

コメントを投稿