我创建了一个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();
有帮助吗?

解决方案 2

显示对话框时,将调用

onPrepareDialog方法。因此,最好通过重写此方法来更改文本或其他功能。

其他提示

我认为我已经修复了onPrepareDialog的不一致行为。最初创建对话框时(当它仍然是AlertDialog.Builder时),您必须将消息设置为初始状态(非空)或onPrepareDialog不会覆盖具有预期值的消息。因此,当您创建对话框时,请执行以下操作以使消息中始终具有非空值。我挣扎了几天,偶然发现了这个解决方案:

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

if ( message == null ) {
    resultAlert.setMessage("");
} else {
    resultAlert.setMessage(message);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top