在android中的对话框内创建对话框的异常

时间:2011-02-10 16:10:41

标签: android dialog

我在对话框中有几个对话框抛出异常:

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;

任何提示?

由于

2 个答案:

答案 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的回复。