这似乎不起作用。除非我在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;
    }
}

最佳答案

我认为我有一个针对onPrepareDialog的修复程序,该修复程序不显示使用setMessage设置的消息。最初创建对话框时(当它仍然是AlertDialog.Builder时),必须将消息设置为初始状态(不为null),否则onPrepareDialog不会用预期值覆盖它。因此,在创建对话框时,请执行以下操作以使消息中始终具有非null值。我为此奋斗了几天,偶然发现了这个解决方案:

最初创建对话框时(onPrepareDialog中不存在):

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

if ( message == null ) {
    resultAlert.setMessage("");
} else {
    resultAlert.setMessage(message);
}


然后在onPrepareDialog中,您应该可以使用dialog.setMessage(yourMessage)使用所需的任何字符串覆盖该值。这似乎是Google代码中的缺陷(我认为他们称其为错误。)

07-26 09:40