7

我创建了一个 AlertDialog 以在成功时向用户显示下一级挑战。所以,对应的代码是这样的。当游戏成功时调用 showDialog(R.id.display_success) 并执行以下代码。

所以,我希望在每次调用中都执行此代码。然而; 游戏只执行一次,并在其他所有执行中显示相同的 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 时),您必须将消息设置为初始状态(非空),否则 onPrepareDialog 不会用预期值覆盖消息。因此,当您创建对话框时,请执行以下操作以在消息中始终包含非空值。我为此苦苦挣扎了好几天,偶然发现了这个解决方案:

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 回答