我创建了一个 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();
最佳答案
我想我已经修复了 onPrepareDialog 的不一致行为。最初创建对话框时(当它仍然是 AlertDialog.Builder 时),您必须将消息设置为初始状态(非空),否则 onPrepareDialog 不会用预期值覆盖消息。因此,当您创建对话框时,执行类似这样的操作以在消息中始终具有非空值。我为此苦苦挣扎了好几天,偶然发现了这个解决方案:
AlertDialog.Builder resultAlert = new AlertDialog.Builder(context);
if ( message == null ) {
resultAlert.setMessage("");
} else {
resultAlert.setMessage(message);
}
关于Android:无法更改 AlertDialog 中出现的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/834139/