Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android,onPrepareDialog要更新参数化字符串,但未更新。_Android - Fatal编程技术网

Android,onPrepareDialog要更新参数化字符串,但未更新。

Android,onPrepareDialog要更新参数化字符串,但未更新。,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(

这似乎不起作用。警报对话框甚至不显示标题或消息,除非我在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时),必须将消息设置为初始状态(非空),否则onPrepareDialog将不会用预期值覆盖它。因此,在创建对话框时,请执行类似操作,以确保消息中始终有非null值。我为此挣扎了几天,意外地找到了这个解决方案:

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

然后在onPrepareDialog中,您应该能够使用dialog.setMessage(yourMessage)用您想要的任何字符串覆盖该值。这似乎是谷歌代码中的一个缺陷(我认为他们称之为bug)。

是的,这是一个bug:。必须在onCreateDialog中使用非null值初始化消息,才能使setMessage()在onPrepareDialog中工作。
AlertDialog.Builder resultAlert = new AlertDialog.Builder(context);

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