Android: невозможно изменить текст, появляется в AlertDialog - PullRequest
7 голосов
/ 07 мая 2009

Я создал 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 ]

4 голосов
/ 01 ноября 2011

Я думаю, что у меня есть исправление для непоследовательного поведения onPrepareDialog. При первоначальном создании диалогового окна (когда это все еще AlertDialog.Builder), вы должны установить сообщение в начальное состояние (не нулевое), иначе onPrepareDialog НЕ перезапишет сообщение с предполагаемым значением. Поэтому, когда вы создаете диалог, делайте что-то подобное, чтобы в сообщении всегда было ненулевое значение. Я боролся с этим в течение нескольких дней и нашел это решение случайно:

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

if ( message == null ) {
    resultAlert.setMessage("");
} else {
    resultAlert.setMessage(message);
}
3 голосов
/ 07 мая 2009

Метод onPrepareDialog вызывается, когда отображается диалоговое окно. Поэтому лучше изменить текст или другие функции, переопределив этот метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...