我在对话框中有几个对话框抛出异常:
02-10 15:52:45.592: ERROR/AndroidRuntime(321): java.lang.IllegalArgumentException: Activity#onCreateDialog did not create a dialog for id 2
代码是:
dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
....
showDialog(ID_DIALOG_SEND);
对话框定义如下:
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case ID_DIALOG_SEND:
ProgressDialog loadingDialog = new ProgressDialog(this);
loadingDialog.setMessage("Sending...");
loadingDialog.setIndeterminate(true);
loadingDialog.setCancelable(false);
return null;
....
它也不适用于此对话框:
Builder b = new AlertDialog.Builder(this);
case ID_DIALOG_ERR:
b.setMessage("Error")
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
return null;
任何提示?
由于
答案 0 :(得分:3)
onCreateDialog
是否应该返回您在Dialog
语句中创建的case
,而不是返回null
?
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case ID_DIALOG_SEND:
ProgressDialog loadingDialog = new ProgressDialog(this);
loadingDialog.setMessage("Sending...");
loadingDialog.setIndeterminate(true);
loadingDialog.setCancelable(false);
return loadingDialog;
...
答案 1 :(得分:1)
因为你试图在Anonymous Inner类中使用showDialog(ID_DIALOG_SEND);
,它会给你一个问题,因为它认为ShowDialog是内部类的一个方法。您需要引用外部Activity类,其中包含它以使其起作用。所以在你的情况下,我会这样做:
dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
....
thisActivityClassName.showDialog(ID_DIALOG_SEND);
或thisActivityClassName.this.showDialog(ID_DIALOG_SEND);
否则,如果失败,您可能需要创建一个Handler
来与外部类进行通信。
此外,我完全同意并重申dave.c的回复。