2010年12月21日

ダイアログに地獄を見た

ダイアログの使い方はとてつもなく面倒じゃないでしょうか?
比べるのは間違いでしょうけど、JavaScriptならwindows.alert()一発のところをAlertDialog.Builderで無名クラスを設定するなんて面倒にしか思えません。
ちょっとだけ警告メッセージを出すだけでもAlertDialog.Builder()を呼び出して、内部クラスでDialogInterface.OnClickListener()を設定して、なんて大変煩わしい。

自分としてはメニューボタンからさらに選択肢を出して、そこから実際の処理を行おうとしたのです。
後でメニューにサブメニューが設定できることに気づきましたが、気づかないまま二回AlertDialog.Builder()を呼び出す処理を書くはめになって、ソースがごちゃごちゃする原因となりました。
まあ自分の間違いなので、ぼやくのがおかしいかも知れませんが、それでもそもそも、

    protected Dialog onCreateDialog(int id){
     switch(id){
     case 条件:
     return new AlertDialog.Builder(クラス名.this)
    .setIcon(android.R.drawable.ic_menu_xxxx)
    .setTitle("タイトル")
    .setView(ViewまたはEditTextなど)
    .setPositiveButton("テキスト",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
処理;
}
}).show();
}
}
    }

なんて長すぎると思いませんか?
処理がそれぞれ違うものだとこの長いステートメントをいくつも書くはめになり、これだけで自分のソースはかなり長くなりました。
しかも、独自のViewを設定できるということでやっていたら、findViewById()で見つけられないし、変数を呼ぶのにfinalで定義しておかないと見つからないというのも理解するのに時間のかかったポイントでした。

それに、なんといっても一番時間がかかったのは、(だいぶ時間がたったので、あれほど苦労したのにうまく説明できなくなってしまいましたが)DialogInterface.OnClickListener()の後でonClick()イベントを設定する箇所でした。
自分としてはここでOKボタンをクリックした直後にテキストボックスのデータを別メソッドに渡したかったのですが、Dialogクラスがリターンされてしまうので、showDialog()がある呼び出し側のメソッドに処理が戻ってしまってどんどん先へ進んでしまうというところが良く理解できず、理解できても「それじゃあどうする?」となったら全然対策が思いつかないのでした。
ここでかなり長期間の足踏みをして、ようやくEditTextはonCreateDialog()で使うのはやめて別メソッドでreturn new AlertDialog.Builder()にせず、インスタンスを作ってからステートメントを組むことで脳内ループをbreakしました。

   AlertDialog.Builder adb = new AlertDialog.Builder(this);
     adb.setIcon(android.R.drawable.ic_menu_edit).setTitle(message)
.....

しかし、こんな簡単なことも分からないのかと、自分の頭の悪さを不断に思い知らされるのがやりきれないですよ。(今でも良く分かってないですけど)
そんなわけで、「プログラミングは楽しい」などと自分としては全然思えないのでした。ふう……

posted by 白虹 at 23:48| Comment(0) | TrackBack(0) | Android開発
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/42196933

この記事へのトラックバック