Intereting Posts
TextView.setText () с очень длинными строковыми блоками. Доступ в Realm из неправильного потока Исключение при отправке копии с использованием copyFromRealm Пользовательский SurfaceView, вызывающий NoSuchMethodException Связывание и отключение Android-сервиса в / из фрагмента (в ViewPager) Важный DONT для хорошего дизайна приложений для Android (уровень начального / начального уровня)? Почему мы используем canvas.save или canvas.restore? Есть ли намерение запустить Android Market на страницу «Мои приложения»? Разрешение Android ACCESS_LOCATION_EXTRA_COMMANDS Как подтвердить, что Android Share Intent успешно или завершен Как вставить чертежи в текст Время соединения Android BLE NFC и MIME TYPE чувствительны к регистру Отключить диалоговое окно создания предупреждений из onpause Основное объяснение контекста в android Android Studio – ошибка ADB – «… устройство несанкционировано. Проверьте диалоговое окно подтверждения на своем устройстве. "

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(); 

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

 AlertDialog.Builder resultAlert = new AlertDialog.Builder(context); if ( message == null ) { resultAlert.setMessage(""); } else { resultAlert.setMessage(message); } 

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