Android: невозможно изменить текст, появляется в AlertDialog
Вопрос
Я создал 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);
}