2

我在这里有一些代码(我的活动类和一些扩展 WebViewClient 的类)所以,在我的活动中,我做了这样的事情:

protected Dialog onCreateDialog(int id) {
    switch(id) {
        case 1:
            //logging vk dialog
            Log.d("OLOLOLO", "webview"); 
            dialog = new Dialog(this);
            dialog.setContentView(R.layout.webviewl);
            dialog.setTitle("loggin in");

            webview = (WebView) dialog.findViewById(R.id.vkWebView);
            webview.setWebViewClient(wvClforVK);  
            webview.loadUrl(url);
            // do the work to define the pause Dialog 
            break;
        case 2:
            // already logged vk dialog
            break;
        default:
            dialog = null;
    }
    return dialog;
}

然后请showDialog(1)一些buttonclick听众。

在我的 webview 类onPageFinished()方法中,我需要关闭我的对话框,但我认为这样做是不正确的:

MyActivity activity = new MyActivity();  //my main activity object
activity.dismissDialog(1);

它不起作用:

01-03 20:41:10.758: E/AndroidRuntime(1172): java.lang.IllegalArgumentException: 没有通过 Activity#showDialog 显示 id 为 1 的对话框

如何让我的活动对象正确关闭对话框?

4

2 回答 2

3

问题是您实例化了一个没有任何对话框的新活动。您必须在创建对话框的同一个活动实例上调用dismissDialog 方法。如果您在另一个类中调用它,则必须以某种方式将您的活动传递给该类(例如,您可以将其作为参数传递)。无论如何,不​​建议以这种方式实例化活动,如果您在项目的清单文件中定义它们,它们会自动实例化。

于 2012-01-03T21:16:08.960 回答
1

正如异常所说,您正在尝试关闭在使用 showDialog 之前未显示的对话框。您需要检查对话框的生命周期。您可以使用Dialog.isShowing()方法确认对话框在关闭之前显示。

于 2012-01-03T21:21:13.460 回答