7

成功したときにユーザーに次のレベルの課題を表示する AlertDialog を作成しました。ということで、対応コードはこんな感じ。ゲームが成功すると showDialog(R.id.display_success) が呼び出され、次のコードが実行されます。

したがって、すべての呼び出しでこのコードを実行することを期待しています。でも; ゲームは 1 回だけ実行され、他のすべての実行で同じ AlertDialog が表示されます。つまり、最初のインスタンスが作成された後にインスタンスが作成されず、最初のインスタンスが常に使用されるようです。

case R.id.display_success:           
       updateGameSettings();
       message = formatLevel()
       + formatMission();
       return new AlertDialog.Builder(this)
       .setIcon(R.drawable.smiley_happy)
       .setTitle(R.string.dialog_success)
       .setMessage(message)
       .setPositiveButton(R.string.alert_dialog_newgame, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog,     int whichButton) {
                       startANewGame();
               }
       })
       .setNegativeButton(R.string.exit, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int whichButton) {
                     finish();
               }
       })
       .create();
4

2 に答える 2

4

onPrepareDialog の一貫性のない動作を修正したと思います。最初にダイアログを作成するとき (まだ AlertDialog.Builder である場合)、メッセージを初期状態 (null 以外) に設定する必要があります。そうしないと、onPrepareDialog は意図した値でメッセージを上書きしません。したがって、ダイアログを作成するときは、次のようなことを行って、メッセージに常に null 以外の値を含めます。私はこれに何日も苦労し、偶然この解決策を見つけました:

AlertDialog.Builder resultAlert = new AlertDialog.Builder(context);

if ( message == null ) {
    resultAlert.setMessage("");
} else {
    resultAlert.setMessage(message);
}
于 2011-10-31T20:39:56.723 に答える
3

ダイアログが表示されると、onPrepareDialogメソッドが呼び出されます。したがって、このメソッドをオーバーライドして、テキストやその他の機能を変更することをお勧めします。

于 2009-05-07T11:49:39.340 に答える