#android
#Android
Вопрос:
Похоже, это не работает. В диалоговых окнах с предупреждениями даже не отображается заголовок или сообщение, если я не установил их в методе onCreateDialog .
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
super.onPrepareDialog(id, dialog);
switch(id) {
case R.id.catalog_rename_dialog:
((AlertDialog) dialog).setTitle(getString(R.string.catalog_rename_prompt, catalogDb.getColumnById(selectedCatalogId, CatalogDbAdapter.KEY_NAME)));
break;
case R.id.catalog_delete_dialog:
((AlertDialog) dialog).setMessage(getString(R.string.delete_prompt, catalogDb.getColumnById(selectedCatalogId, CatalogDbAdapter.KEY_NAME)));
break;
}
}
Ответ №1:
Я думаю, что у меня есть исправление для onpreparredialog, не отображающее сообщение, установленное с помощью setMessage . При первоначальном создании диалогового окна (когда это все еще AlertDialog.Builder), вы должны установить сообщение в начальное состояние (не null), иначе onpreparredialog НЕ перезапишет его заданным значением. Поэтому, когда вы создаете диалоговое окно, сделайте что-то вроде этого, чтобы в сообщении всегда было ненулевое значение. Я боролся с этим в течение нескольких дней и случайно нашел это решение:
при первоначальном создании диалогового окна (НЕ в onpreparredialog):
AlertDialog.Builder resultAlert = new AlertDialog.Builder(context);
if ( message == null ) {
resultAlert.setMessage("");
} else {
resultAlert.setMessage(message);
}
затем в onpreparredialog вы должны иметь возможность перезаписать значение любой строкой, которую вы хотите, используя dialog.setMessage( yourMessage ). Похоже, это дефект в коде Google (я думаю, они называют это ошибкой.)
Комментарии:
1. Да, это ошибка: code.google.com/p/android/issues/detail?id=6489 . Вы должны инициализировать сообщение с ненулевым значением в onCreateDialog, чтобы setMessage() работал в onpreparredialog.
Ответ №2:
Я думаю, вы путаете поведение create и prepare.
- onCreateDialog используется для настройки элементов управления, присутствующих в диалоговом окне. Он вызывается один раз.
- onpreparredialog используется для настройки отображаемых значений. Он вызывается каждый раз, когда отображается диалоговое окно